YuS_2
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору z3 17-05-2019 Цитата: Уважаемые специалисты, помогите решить задачку. | 18-05-2019 Цитата: Не осилил как прикрутить к моему, и уж тем более как потом добавить функцию ожидания до истечения времени проверки. | Тут бы озвучить полную задачу... ну, да ладно... 1. Можно использовать способ озвученный выше (предпочтительнее, судя по задаче) 2. У меня есть готовый скрипт, который писался немного под другую, но похожую задачу: Код: #requires -version 3.0 # Исходный каталог входящих файлов (абсолютный или относительный путь): $src = 'd:\1' # Корневой каталог для целевых субдиректорий (абсолютный или относительный путь): $dst = 'd:\2' # Фильтр файлов: $flt = '*.*' # Количество циклов до прерывания скрипта при ошибке перемещения (1 цикл ~ 10 сек): $global:cnt = 10 $global:dst_fld = gi $dst $src = gi $src $wtch = new-object system.io.filesystemwatcher $wtch.path = $src.fullname $wtch.filter = $flt $wtch.includesubdirectories = $false $wtch.enableraisingevents = $true $global:crt = register-objectevent $wtch "Created" -action { function test-file { test-path $($arr[$i].fullname + '\' + $fname) -patht leaf } # Если ps версии 2.0, то раскомментировать следующую строку: #$arr = dir $dst_fld.fullname|?{$_.psiscontainer};$fin = $eventargs.fullpath;write-host Created: [$fin] # Если строка выше раскомментирована, то необходимо закомментировать следующую строку: $arr = dir $dst_fld.fullname -dir;$fin = $eventargs.fullpath;write-host Created: [$fin] $i,$k,$fname = 0,0,(gi $fin).name while((test-file) -and $i -lt $arr.count-1){$i++} if(test-file){ write-host Для этого файла закончились каталоги: [$fin] -for red } else { do { try { sleep 10 move $eventargs.fullpath $arr[$i].fullname -ea 1 write-host Moved: [$fin] to [$($arr[$i].fullname)] -for cyan $busy = $true } catch { if($k -eq 0){write-host Error! $_ -for red;} $busy = $false;$k++;sleep -s 10 if($k -gt $cnt){ write-host Превышено допустимое время ожидания, завершаем задание. -for red unregister-event $crt.id;sleep 2;get-job|remove-job;break } } } while ($busy -ne $true) } } | - выполняет следующую задачу: 1. Следит за появлением файлов в исходном каталоге и перемещает файлы в целевой каталог с подкаталогами. 2. Входящие файлы могут быть с одинаковыми именами, т.е. имена могут повторяться. 3. Для того, чтобы файлы не перезаписывались, в целевом каталоге создаются подкаталоги - столько, сколько необходимо сохранить копий файлов с одинаковыми именами. 4. В целевом каталоге должен существовать хотя бы один подкаталог. 5. Если в целевом каталоге подкаталоги заканчиваются, то следующий файл с повторяющимся именем перемещен не будет. 6. Если файл не доступен для перемещения (не закачан полностью), скрипт осуществляет периодические попытки перемещения либо до успешного перемещения, либо до превышения ограничения в количестве попыток - их количество регулируется. 7. При достижении ограничения в количестве попыток, скрипт завершает работу и требует ручного перезапуска для продолжения слежения (в консоль будут выводиться соответствующие записи). 8. Для слежения за определенным типом файлов, можно задать фильтр с маской. ... возможно, что-то упустил, спрашивайте. | Всего записей: 3218 | Зарегистр. 03-02-2009 | Отправлено: 22:14 18-05-2019 | Исправлено: YuS_2, 22:16 18-05-2019 |
|