PDA

Показать полную графическую версию : [решено] Обнаружение новых файлов в папке


Elven
13-04-2016, 18:12
Имеется папка в которую время от времени падают файлы, и есть скрипт который их обрабатывает (файл и его атрибуты при этом не изменяется, переименовывать/перемещать тоже нельзя). Каждый из файлов нужно прогнать через скрипт только один раз. Имена файлов не повторяются.
Задача, конечно, тупая, но меня, похоже, заклинило.

NickM
13-04-2016, 18:27
Держать файл в который записывать имена уже обработанных файлов.
Что то типа - if not in(файл) bla bla bla

megaloman
14-04-2016, 11:59
Создадим где-нибудь служебную папку (лишь бы были там права на запись), будем просматривать ваш инбокс (папка в которую время от времени падают файлы) и по мере обработки в нём файлов будем создавать в служебной папке служебные файла с именами обработанных файлов с добавлением расширения .log для определённости, чтобы не путать с исходными. Если в этой служебной папке уже имеется служебный файл с соответствующим именем, обработку не вызываем.
@Echo off
cls

Set "In=Z:\Papka"
Set "Log=Z:\Papka\Log"
Md "%Log%" 2>nul

for /f "usebackq Delims=" %%i in (`dir "%In%\*.*" /b /A:-d 2^>nul`) Do (
If Not Exist "%Log%\%%i.log" (
Md "%Log%" >"%Log%\%%i.log" 2>nul
Call :Obrabotka "%In%" "%%i"
)
)
pause
GoTo :Eof

:Obrabotka

Echo %1 %2

Elven
14-04-2016, 13:01
megaloman, моложе. Накапливаются не бесконечно, периодически удаляются все вместе. Но вот удаляются они в довольно рандомное время...
NickM, тоже думал в эту сторону.
megaloman, весьма отлично. спасибо.

megaloman
14-04-2016, 13:32
@Echo off
cls

Set "In=Z:\Papka"
Set "Log=Z:\Papka\Log"

If Not Exist %Log%\Log.txt (
Md "%Log%" 2>nul
Md "%Log%" >"%Log%\Log.txt" 2>nul
)

for /f "usebackq Delims=" %%i in (`xcopy /L /EXCLUDE:%Log%\Log.txt "%In%\*.*" "%Log%\" 2^>nul`) Do (
If Exist "%%i" (
Echo %%~i >>%Log%\Log.txt
Call :Obrabotka "%%i"
)
)
pause
GoTo :Eof

:Obrabotka

Echo %1
Создаём где-нибудь лог-файл (увы, если имя этого файла необходимо взять в кавычки, у меня не получается) и с помощью опции Exclude команды Xcopy получаем список необработанных файлов. Имена обработанных записываем в лог.

megaloman
14-04-2016, 13:50
Elven, если файлы периодически удаляются все вместе в довольно рандомное время... то в первом решении надо озаботиться тем, чтобы вспомогательные файлы не накапливались бесконечно. Вот первое решение с добавленным куском на синхронизацию имеющихся и вспомогательных файлов.@Echo off
cls

Set "In=Z:\Papka"
Set "Log=Z:\Papka\Log"
Md "%Log%" 2>nul

for /f "usebackq Delims=" %%i in (`dir "%In%\*.*" /b /A:-d 2^>nul`) Do (
If Not Exist "%Log%\%%i.log" (
Md "%Log%" >"%Log%\%%i.log" 2>nul
Call :Obrabotka "%In%" "%%i"
)
)

for /f "usebackq Delims=" %%i in (`dir "%Log%\*.log" /b /A:-d 2^>nul`) Do (
If Not Exist "%In%\%%~ni" Del "%Log%\%%i"
)

pause
GoTo :Eof

:Obrabotka

Echo %1 %2




© OSzone.net 2001-2012