как открыть папку и запустить файл?

<p>мне нужно установить какой-то сценарий на моем компьютере с vista, чтобы всякий раз, когда файл добавлялся в определенную папку, он автоматически запускал фоновый процесс, который работает с файлом. (фоновый процесс - это просто утилита командной строки, которая принимает имя файла в качестве аргумента вместе с некоторыми другими предопределенными параметрами.)</p><p>я хотел бы сделать это, используя встроенные функции windows, если это возможно, из соображений производительности и обслуживания. я изучал использование планировщика заданий, но после некоторого изучения системы триггеров у меня не было возможности разобраться в этом, и я даже не уверен, что она способна делать то, что мне нужно.</p><p>буду признателен за любые предложения. спасибо!</p>

<p>спасибо всем за предложения.</p><p>я закончил тем, что написал vbscript, который примерно основывался на идее linker3000 опрашивать папку и использовать планировщик задач, чтобы он запускался при запуске. в итоге я получил основной синтаксис от <a href="https://gallery.technet.microsoft.com/scriptcenter/18c5d6b8-565e-4ab9-8e1f-7daefcc10545">этого ресурса</a> и сделал необходимые настройки.</p><p>я все еще хотел бы оптимизировать его в какой-то момент, запустив весь сценарий в управляемой событиями системе, но у меня не хватило времени, чтобы поработать над этим, и, ну, это достаточно хорошо.</p><p>вот сценарий, на случай, если кому-то интересно (с несоответствующим сегментом преобразования, отредактированным для ясности):</p><pre><code>' 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 </code></pre><p>(кроме того, я не хочу оставлять этот вопрос официально без ответа - и мне неприятно принимать мой собственный ответ на вопрос - но я действительно проголосовал за ответ linker3000 в качестве благодарности!)</p>

<p>на работе мы используем powershell для мониторинга папок.<br> его можно использовать начиная с windows vista (предварительно установлены .net и powershell) без каких-либо дополнительных инструментов.</p><p>этот скрипт отслеживает определенную папку и записывает файл журнала. вы можете заменить действие и делать все, что хотите, например, вызвать внешний инструмент</p><h3>пример файла журнала</h3><pre> 23.11.2014 19:22:04, создано, 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, удалено, d:\source\new text document.txt </pre><h1>startmonitoring.ps1</h1><pre><code>### 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} </code></pre><h1>как пользоваться</h1><ol> <li>создать новый текстовый файл</li> <li>скопируйте и вставьте вышеуказанный код</li> <li>измените следующие настройки в соответствии со своими потребностями: <ul> <li>папка для мониторинга: <code>$watcher.path = "d:source" фильтр файлов для включения только определенных типов файлов: $watcher.filter = "*.*"</code></li> <li>включить подкаталоги да/нет: <code>$watcher.includesubdirectories = $true</code></li> </ul> </li> <li>сохраните и переименуйте его в <code>startmonitoring.ps1</code></li> <li>начать мониторинг с помощью<em> щелкните правой кнопкой мыши »выполнить с помощью powershell </em></li> </ol><p>чтобы остановить мониторинг, достаточно закрыть окно powershell.</p><h3>дальнейшее чтение</h3><ul> <li> <a href="http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher(v=vs.110).aspx">документация для powershell filesystemwatcher</a> </li> <li> <a href="http://technet.microsoft.com/en-us/library/hh849929.aspx">документация для powershell register-event</a> </li> <li> <a href="https://social.technet.microsoft.com:443/forums/scriptcenter/en-us/c75c7bbd-4e32-428a-b3dc-815d5c42fd36/powershell-check-folder-for-new-files">вдохновение</a> для <a href="http://dereknewton.com/2011/05/monitoring-file-system-changes-with-powershell/">сценарий</a> </li> </ul>

<p>вы, кажется, находитесь на правильных строках - вы можете использовать планировщик задач для регулярного запуска файла .bat или .cmd, и этот файл может начинаться со строки, чтобы проверить наличие необходимого файла - на самом деле, я проверил бы на отсутствие файла; например:</p><pre><code>@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 </code></pre><p>вы также можете изменить этот код и запустить его в цикле с, скажем, задержкой в 1 минуту в цикле, а затем поместить ссылку на пакетный файл в папку автозагрузки windows:</p><pre><code>@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 </code></pre><p>существуют и другие способы достижения задержки в зависимости от версии операционной системы windows и от того, какие дополнительные комплекты ресурсов были установлены, но команда ping в значительной степени работает при любых обстоятельствах. в приведенной выше команде ping 10 фантомных pings выполняются с задержкой 6000 мс (то есть: 6 секунд) между ними, вы можете поиграть с этими значениями, чтобы добиться необходимой задержки между циклами пакетного файла.</p>

<p>если действие просто копировать измененные файлы, вы можете использовать robocopy/mon</p><p>не знаю, использует ли robocopy filesystemwatcher или работает путем опроса изменений</p>

<p>вы можете посмотреть на <a href="http://www.dropitproject.com/">dropit</a> (бесплатно). программа подходит для обработки входящих файлов некоторыми автоматическими способами. вы можете перемещать, копировать, удалять и передавать параметры в другие программы командной строки для преобразования изображений, разделения pdf-файлов и т.д.</p>

<p>или вы можете использовать <a href="http://leelusoft.blogspot.co.uk/2010/07/watch-4-folder-22.html">watch 4 folder</a> . очевидно, это бесплатное по, переносимое и совместимое с windows 7. я не пробовал его, но нашел его с помощью веб-поиска и решил передать его.</p><p>мне также нравится сценарий vbs, также размещенный на сайте.</p>

<p>также найден <a href="https://facebook.github.io/watchman/">сторож</a> , кажется, довольно большой, и поменьше <a href="https://github.com/mattgreen/watchexec">watchexec</a> я не пробовал.</p>

<p>мы используем коммерческий инструмент (т.е. не бесплатный) folder poll из <a href="http://www.myassays.com/folder-poll">http://www.myassays.com/folder-poll</a> , чтобы сделать это. это приложение для windows, которое включает в себя удобное приложение-менеджер для упрощения настройки. также есть опция конфигурации xml. фактический опрос папок выполняется как служба windows (поэтому запускается автоматически при каждом перезапуске). когда в опрашиваемой папке обнаруживается новый файл, приложение может запускаться автоматически (вы можете указать свои собственные аргументы командной строки). это может делать другие вещи, такие как копирование/перемещение файлов тоже. кроме того, активность может быть записана в файл журнала, и есть другие дополнительные операции.</p>