Компьютерный форум 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=221799)

AlexVong 29-11-2011 21:45 1805968

Мониторить папку
 
Подскажите, как реализовать мониторинг за определенной папкой(в которой сохраняются отчеты в формате txt), то есть при появлении в ней файлов - переносить их в другую папку присвоив произвольное имя (например Дата&время.txt)? Пробывал батником, но он переносит файлы не дождавшись когда их полностью создаст программа.

Vadikan 29-11-2011 22:43 1806001

AlexVong, в планировщик поставьте выполнение каждые X минут.

Loran_rus 30-11-2011 09:40 1806252

Vadikan
Скорее всего проблема не в организации копирования по времени, а в том что программа сначала создает файл и потом в течении какого то периода времени дописывает в него данные

AlexVong
Как раз при помощи переименования и можно выяснить в CMD/BAT скрипте занят файл приложением или уже нет

Цитата:

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

: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 будет выполнена без ошибки (т.е. файл свободен), то с ним можно выполнять любые действия. В последнем примере это его удаление.
Источник -> Аккуратней у меня на этот линк ругается антивирус на BV:Agent-HE [Trj]

Sat_Kelman 30-11-2011 12:55 1806364

У нас стоит Cron и каждый час запускает батник, который проверяет наличие файлов в папке.


Время: 01:40.

Время: 01:40.
© OSzone.net 2001-