Рубрики
cmd \ vbs \ scripts

Как в bat файле дождаться появления определенного файла

https://www.microsoft.com/en-us/download/details.aspx?id=17657 - Resource Kit
http://www.cyberforum.ru/cmd-bat/thread792046.html  - Resource Kit

Иногда необходимо при появлении определенного файла в папке выполнить какое-то действие. 
Чтобы организовать проверку появления файла в папке можно использовать следующий пакетный файл

:test
if exist c:\1.txt goto go
sleep 10
goto test
:go
notepad

Такой пакетный файл будет проверять с интервалом 10 секунд наличие в корне диска С файла 1.txt и когда файл 1.txt появится, 
будет выполнено действие, указанное после метки go, т.е. в этом примере будет запущен Блокнот.
Утилита sleep свободно распространяется в составе Resource Kit. 

Если файл 1.txt большого размера и копируется откуда-то, то может получится так, что пакетный файл проверит его наличие в то время, 
как файл еще не скопировался или занят другим приложением. 
В таком случае, попытка выполнить какие-то действия с файлом 1.txt приведет к ошибке. 

Чтобы этого не произошло пакетный файл можно модифицировать следующим образом

:test
if exist c:\1.txt goto go
sleep 10
goto test
:go
rename c:\1.txt 1.txt
if not errorlevel 0 goto go
del c:\1.txt

Когда файл 1.txt скопировался на диск С не полностью, либо занят другим приложением, 
попытка его переименовать вызовет ошибку и цикл будет повторяться до тех пор, пока файл не скопируется полностью либо не будет освобожден. 
После того, как команда rename c:\1.txt 1.txt будет выполнена без ошибки (т.е. файл свободен), то с ним можно выполнять любые действия. 
В последнем примере это его удаление.