Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Мониторинг файлов в папке с последующим запуском скрипта. (http://forum.oszone.net/showthread.php?t=342065)

c0t0s 04-09-2019 16:00 2886642

Мониторинг файлов в папке с последующим запуском скрипта.
 
Добрый день!
Есть папки с данными С:\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

Если для двух папок сделать проблематично - можно сделать для каждой отдельный скрипт. Где-то читал, что мониторинг нескольких папок проблематичен.

megaloman 04-09-2019 17:02 2886647

Код:

@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

Батник поместИте в планировщик и делайте с нужным вам интервалом

c0t0s 05-09-2019 10:54 2886750

Цитата:

Цитата 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 ? Есть принципиальная разница в данной ситуации?

megaloman 05-09-2019 11:42 2886762

c0t0s, имхо, надёжнее в планировщике. А нужно так часто?

c0t0s 05-09-2019 12:49 2886771

Цитата:

Цитата megaloman
А нужно так часто? »

Да, нужно мониторить постоянно. Файлы появляются без определенной последовательности в процессе работы(т.е. в любое время суток).. Не знаю как еще можно мониторить, возможно подвесить на zabbix через vfs.dir.count, но это уже другая история). Если знаете интересные варианты - всегда рад выслушать.

megaloman 05-09-2019 12:52 2886772

c0t0s, потом Вы скажете, что Вам не нравится выскакивающее окно cmd ...

megaloman 05-09-2019 13:25 2886780

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 надо удалить
Может, не стОит так радикально вычищать файлы, может, оставлять некоторое количество?

c0t0s 05-09-2019 14:49 2886790

Цитата:

Цитата megaloman
Может, не стОит так радикально вычищать файлы, может, оставлять некоторое количество? »

В этом вся суть, нужно вычищать папку при условии, что файлы начали скапливаться. Огромное Вам спасибо еще раз за помощь!

megaloman 06-09-2019 11:59 2886903

c0t0s, Может, вообще не стОит удалять файлы? Это как симптоматическое лечение у медиков: человек уже при смерти, а чувствует себя хорошо. :). Зачем-то эти файлы были нужны? Их как-то надо было обработать?
Рискую предположить, что агент по какой-то причине останавливается, и если его просто перезапустить, то файлы обработаются без силовой операции. Может, стОит попробовать мой последний скрипт без удаления (не убирать в for echo или вообще закоментировать или удалить For)?


Время: 14:48.

Время: 14:48.
© OSzone.net 2001-