Я новичок в Powershell. Я нашел сценарий, который работает с тем, что мне нужно, вроде.
То, что я ищу, это скрипт для отслеживания папки для определенных имен файлов / типов. В зависимости от имени / типа файла, я хочу, чтобы он выполнял определенный командный файл для выполнения команды для утилиты сервера.
Как именно я бы этого достиг. Я нашел этот скрипт и добавил элемент invoke для запуска batfile файла, такого как PDF, который попадает в папку. Однако мне нужно отфильтровать его и запустить другой bat-файл в зависимости от имени файла. То, что у меня есть, вызывает файл bat для каждого файла, который попадает в папку, которую я не хочу. Мое знание минимально, и я знаю только достаточно, чтобы быть опасным.
Если XXXX.PDF, XXRX.PDF, XXLX.PDF попали в папку, мне нужно, чтобы он знал, если XXXX.PDF приземляется, запустите только XXXX.bat. Если приземляется XXRX.PDF, запускается только XXRX.BAT и т. Д. И т. Д.
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "D:\XXXX\XXXX"
$watcher.Filter = "*.PDF"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
### DEFINE ACTIONS AFTER A EVENT IS DETECTED
$action = {Invoke-Item "D:\BATCH FILES\XXXXX.bat" -filter = "XXXXX.pdf"}
### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY
$created = Register-ObjectEvent $watcher "Created" -Action $action
### $changed = Register-ObjectEvent $watcher "Changed" -Action $action
### $deleted = Register-ObjectEvent $watcher "Deleted" -Action $action
### $renamed = Register-ObjectEvent $watcher "Renamed" -Action $action
while ($true) {sleep 5}
источник
Ответы:
FileWatchers имеют причуды, в зависимости от того, как создаются файлы :
Так что в вашем случае я бы пошел с простым сравнением каталогов. Вот скрипт, который будет отслеживать каталог на наличие изменений и запускать файлы. Сохранить этот скрипт как
MonitorAndExecute.ps1
, Он принимает следующие аргументы:*
то есть сопоставить все файлы.bat
,5
секунд.Write-Verbose
Сообщения.Пример (запускается из консоли PowerShell).
монитор
*.pdf
файлы в папкеD:\XXXX\XXXX
, recurse, если новый файл найден, запустить файл с тем же базовым именем и расширением*.bat
, будь многословен:MonitorAndExecute.ps1
сценарий:источник