Как контролировать папку и запускать действие командной строки при создании или редактировании файла?

Мне нужно настроить какой-то скрипт на моей машине Vista, так что всякий раз, когда файл добавляется в определенную папку, он автоматически запускает фоновый процесс, который работает с файлом. (Фоновый процесс – это просто утилита командной строки, которая принимает имя файла в качестве аргумента вместе с некоторыми другими предопределенными параметрами.)

Я хотел бы сделать это, используя собственные функции Windows, если это возможно, по причинам производительности и обслуживания. Я изучил использование планировщика заданий, но после долгого изучения триггерной системы я не смог ее полностью понять, и я даже не уверен, способен ли он делать то, что мне нужно.

Буду признателен за любые предложения. Благодаря!

На работе мы используем Powershell для наблюдения за папками.
Его можно использовать, поскольку Windows Vista (.NET и PowerShell предварительно установлена) без каких-либо дополнительных инструментов.

Этот скрипт контролирует определенную папку и записывает файл журнала. Вы можете заменить действие и делать все, что хотите, например, вызвать внешний инструмент

Пример файла журнала

 23.11.2014 19:22:04, Created, D: \ source \ New Text Document.txt
 23.11.2014 19:22:09, Изменено, D: \ source \ New Text Document.txt
 23.11.2014 19:22:09, Изменено, D: \ source \ New Text Document.txt
 23.11.2014 19:22:14, Deleted, D: \ source \ New Text Document.txt

StartMonitoring.ps1

### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO $watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = "D:\source" $watcher.Filter = "*.*" $watcher.IncludeSubdirectories = $true $watcher.EnableRaisingEvents = $true ### DEFINE ACTIONS AFTER AN EVENT IS DETECTED $action = { $path = $Event.SourceEventArgs.FullPath $changeType = $Event.SourceEventArgs.ChangeType $logline = "$(Get-Date), $changeType, $path" Add-content "D:\log.txt" -value $logline } ### DECIDE WHICH EVENTS SHOULD BE WATCHED Register-ObjectEvent $watcher "Created" -Action $action Register-ObjectEvent $watcher "Changed" -Action $action Register-ObjectEvent $watcher "Deleted" -Action $action Register-ObjectEvent $watcher "Renamed" -Action $action while ($true) {sleep 5} 

Как использовать

  1. Создать новый текстовый файл
  2. Скопируйте и вставьте вышеуказанный код
  3. Измените следующие настройки на свои собственные потребности:
    • Папка для мониторинга: $watcher.Path = "D:\source"
    • Файловый фильтр для включения только определенных типов файлов: $watcher.Filter = "*.*"
    • Включить подкаталоги yes / no: $watcher.IncludeSubdirectories = $true
  4. Сохраните и переименуйте его в StartMonitoring.ps1
  5. Начать мониторинг нажатием правой кнопки мыши »Выполнить с помощью PowerShell

Чтобы остановить мониторинг, достаточно закрыть окно PowerShell

дальнейшее чтение

  • Документация для PowerShell's FileSystemWatcher
  • Документация для регистрационного события PowerShell
  • Вдохновение для скрипта

Кажется, что вы находитесь на правильных строках – вы можете использовать планировщик задач для регулярного запуска файла .bat или .cmd, и этот файл может начинаться с строки, чтобы проверить наличие требуемого файла – на самом деле, я 'D проверить отсутствие файла; например:

 @ECHO OFF REM Example file IF NOT EXIST C:\SOMEWHERE\SUBFOLDER\THISFILE.THS EXIT 1 REM All this gets done if the file exists... : : EXIT 0 

Вы также можете изменить этот код и запустить его в цикле с, скажем, 1 минутой задержки в цикле, а затем поместить ссылку на пакетный файл в папке автозагрузки Windows:

 @ECHO OFF REM Example file :LOOP IF NOT EXIST C:\SOMEWHERE\SUBFOLDER\THISFILE.THS GOTO SKIP01 REM All this gets done if the file exists... : : :SKIP01 REM Crafty 1 minute delay... PING 1.1.1.1 -n 10 -w 6000 >NUL GOTO LOOP 

Существуют и другие способы достижения задержки в соответствии с версией Windows, и какие дополнительные наборы ресурсов были установлены, но команда PING в значительной степени работает при любых обстоятельствах. В приведенной выше команде PING 10 фантомных PINGS выполняются с задержкой 6000 мс (то есть: 6 секунд) между ними, вы можете играть с этими значениями для достижения задержки, необходимой между циклами пакетных файлов.

Спасибо всем, за предложения.

Я закончил писать VBScript, который был примерно основан на идее Linker3000 опроса папки и использования планировщика заданий, чтобы запустить его при запуске. В итоге я получил базовый синтаксис этого ресурса и сделал необходимые настройки.

Я бы все еще хотел оптимизировать его в какой-то момент, имея кишки скрипта, запущенного в управляемой событиями системе, но у меня не хватило времени, чтобы поработать над этим, и, ну, это достаточно хорошо.

Вот сценарий, если кто-то заинтересован (с нерелевантным сегментом конверсии отредактирован для ясности):

 ' FOLDER TO MONITOR strFolder = "J:\monitored-folder" ' FREQUENCY TO CHECK IT, IN SECONDS nFrequency = 10 strComputer = "." strQueryFolder = Replace(strFolder, "\", "\\\\") Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colMonitoredEvents = objWMIService.ExecNotificationQuery ("SELECT * FROM __InstanceCreationEvent WITHIN " & nFrequency & " WHERE Targetinstance ISA 'CIM_DirectoryContainsFile' and TargetInstance.GroupComponent='Win32_Directory.Name=""" & strQueryFolder & """'") Do Set objLatestEvent = colMonitoredEvents.NextEvent strNewFile = objLatestEvent.TargetInstance.PartComponent arrNewFile = Split(strNewFile, "=") strFilePath = arrNewFile(1) strFilePath = Replace(strFilePath, "\\", "\") strFilePath = Replace(strFilePath, Chr(34), "") strFileName = Replace(strFilePath, strFolder, "") strTempFilePath = WScript.CreateObject("Scripting.FileSystemObject").GetSpecialFolder(2) & "\TEMP.M4A" ' DO THE OPERATION STUFF ' ... Loop 

(Кроме того, я не хочу оставлять этот вопрос официально без ответа – и я ненавижу принимать свой собственный ответ на вопрос, но я ответил на ответ Linker3000 как благодарность!)

Или вы можете использовать Watch 4 Folder . По-видимому, это бесплатная, портативная и совместимая с Windows 7. Я не пробовал, но нашел ее через веб-поиск и думал, что передаю ее.

Мне тоже нравится скрипт VBS, также представленный на сайте.

Вы можете посмотреть DropIt (бесплатно). Программа подходит для обработки входящих файлов несколькими автоматическими способами. Вы можете перемещать, копировать, удалять и передавать параметры другим программам командной строки для преобразования изображений, разделения PDF-файлов и т. Д.

Если действие предназначено только для копирования измененных файлов, вы можете использовать robocopy / MON

Не знаю, использует ли robocopy FileSystemWatcher или работает путем опроса изменений

Мы используем коммерческий инструмент (т. Е. Не бесплатно) Опрос папок с http://www.myassays.com/folder-poll, чтобы сделать именно это. Это приложение Windows, которое включает удобное приложение-диспетчер для удобной настройки. Кроме того, существует опция конфигурации XML. Фактический опрос папок выполняется как служба Windows (поэтому автоматически запускается при каждом перезапуске). Когда новый файл обнаружен в опрошенной папке, приложение может запускаться автоматически (вы можете указать свои собственные аргументы командной строки). Он может выполнять другие действия, такие как копирование и перемещение файлов. Кроме того, активность может быть зарегистрирована в файле журнала, а также существуют другие расширенные операции.

  • Vista 64-битное уведомление systray «Windows обнаружила, что ваша производительность медленная»
  • Показывать секунды в Vista Clock на системном лотке
  • Можете ли вы изменить расположение папки «Рабочий стол» в Windows?
  • Сеть WiFi отлично подходит для Macbook Pro и Win XP, но Win Vista «Ограниченная связь»
  • WIndows Vista для обновления совместимости с драйверами устройств Windows 10
  • Каковы технические отличия между Windows Vista и Windows 7?
  • Новые почтовые уведомления для дополнительных почтовых ящиков Outlook
  • Как включить административные ресурсы в Vista и XP?
  • Каково решение проблемы с синим экраном (BSOD)?
  • USB-накопитель, не отображающий полный размер
  • Использование загрузчика Vista вместо GRUB
  • Interesting Posts
    Давайте будем гением компьютера.