Мониторинг файлов в папке с последующим запуском скрипта.
Добрый день!
Есть папки с данными С:\Base\1 и С:\Base\2 в которых периодически появляются файлы с разным разрешением(.pdf и .doc, но можно обозначить просто *.*). Эти файлы после обработки автоматически удаляются, но иногда зависают и накапливаются.. Нужно сделать что-то вроде счетчика файлов, чтобы при накоплении в папке более 6 файлов запускался скрипт( .bat файл, находящийся в С:\Base\1.bat).
Может кто-то сталкивался с чем-то похожим и сможет помочь?
Содержание 1.bat
Код:
net stop sqlserveragent
del /S /Q С:\Base\1\*.*
del /S /Q С:\Base\2\*.*
net start sqlserveragent
Если для двух папок сделать проблематично - можно сделать для каждой отдельный скрипт. Где-то читал, что мониторинг нескольких папок проблематичен.
|
Код:
@Echo Off
Call :GTR "Z:\Base\1\*.txt" 6 || Echo 1 Больше
Call :GTR "Z:\Base\2\*.*" 6 || Echo 2 Больше
Call :GTR "Z:\Base\3\*.vbs" 2 || Echo 3 Больше
Exit /B
:GTR
FOR /F "usebackq Skip=%2 delims=" %%f IN (`2^>nul Dir %1 /B /A:-D`) DO Exit /B 1
Exit /B 0
В приложении к Вашему случаю пишИте сами, например:
Код:
@Echo Off
Call :GTR "Z:\Base\1\*.txt" 6 || (echo net stop sqlserveragent &echo del /S /Q Z:\Base\1\*.txt &echo net start sqlserveragent)
Call :GTR "Z:\Base\2\*.*" 6 || (echo net stop sqlserveragent &echo del /S /Q Z:\Base\2\*.* &echo net start sqlserveragent)
Call :GTR "Z:\Base\3\*.*" 5 || echo Call "Z:\tralala\kuku.bat"
Exit /B
:GTR
FOR /F "usebackq Skip=%2 delims=" %%f IN (`2^>nul Dir %1 /B /A:-D`) DO Exit /B 1
Exit /B 0
Батник поместИте в планировщик и делайте с нужным вам интервалом
|
Цитата:
Цитата megaloman
Код:
@Echo Off
Call :GTR "Z:\Base\1\*.txt" 6 || (echo net stop sqlserveragent &echo del /S /Q Z:\Base\1\*.txt &echo net start sqlserveragent)
Call :GTR "Z:\Base\2\*.*" 6 || (echo net stop sqlserveragent &echo del /S /Q Z:\Base\2\*.* &echo net start sqlserveragent)
Call :GTR "Z:\Base\3\*.*" 5 || echo Call "Z:\tralala\kuku.bat"
Exit /B
:GTR
FOR /F "usebackq Skip=%2 delims=" %%f IN (`2^>nul Dir %1 /B /A:-D`) DO Exit /B 1
Exit /B 0
Батник поместИте в планировщик и делайте с нужным вам интервалом »
|
Спасибо за помощь! Единственный момент, хотел у Вас уточнить как лучше организовать(более правильно) работу данного скрипта. Выставить в планировщике интервал в 1 минуту или в самом скрипте организовать работу через :loop ? Есть принципиальная разница в данной ситуации?
|
c0t0s, имхо, надёжнее в планировщике. А нужно так часто?
|
Да, нужно мониторить постоянно. Файлы появляются без определенной последовательности в процессе работы(т.е. в любое время суток).. Не знаю как еще можно мониторить, возможно подвесить на zabbix через vfs.dir.count, но это уже другая история). Если знаете интересные варианты - всегда рад выслушать.
|
c0t0s, потом Вы скажете, что Вам не нравится выскакивающее окно cmd ...
|
c0t0s, ИМХО, моё предыдущее решение не оптимально: там перестартовывается агент для удаления файлов для каждой папки с превышением количества. Вот вариант: агент перестартовывается в случае, если хотя бы в одной папке есть превышение количества файлов, чистятся только папки с превышением.
Код:
@Echo Off
Call :GTR "Z:\Base\1\*.vbs" 6 "@@1"
Call :GTR "Z:\Base\2\*.vbs" 6 "@@2"
Call :GTR "Z:\Base\3\*.vbs" 6 "@@3"
>nul 2>&1 Set "@@" &&(
echo net stop sqlserveragent
FOR /F "usebackq tokens=1* delims==" %%f IN (`2^>nul Set "@@"`) DO Echo Del /S /Q %%g
echo net start sqlserveragent
)
Exit /B
:GTR
Set "%~3="
FOR /F "usebackq Skip=%2 delims=" %%f IN (`2^>nul Dir %1 /B /A:-D`) DO Set "%~3=%1" &Exit /B 0
Exit /B 0
Для каждого вызова :GTR переменная должна быть своя "@@1","@@2"........
Для реальной работы Echo надо удалить
Может, не стОит так радикально вычищать файлы, может, оставлять некоторое количество?
|
Цитата:
Цитата megaloman
Может, не стОит так радикально вычищать файлы, может, оставлять некоторое количество? »
|
В этом вся суть, нужно вычищать папку при условии, что файлы начали скапливаться. Огромное Вам спасибо еще раз за помощь!
|
c0t0s, Может, вообще не стОит удалять файлы? Это как симптоматическое лечение у медиков: человек уже при смерти, а чувствует себя хорошо. :). Зачем-то эти файлы были нужны? Их как-то надо было обработать?
Рискую предположить, что агент по какой-то причине останавливается, и если его просто перезапустить, то файлы обработаются без силовой операции. Может, стОит попробовать мой последний скрипт без удаления (не убирать в for echo или вообще закоментировать или удалить For)?
|
Время: 14:48.
© OSzone.net 2001-