CMD/BAT - [решено] Обнаружение новых файлов в папке

Ответить
Аватара пользователя
Elven

CMD/BAT - [решено] Обнаружение новых файлов в папке

Сообщение Elven »

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

Задача, конечно, тупая, но меня, похоже, заклинило.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Обнаружение новых файлов в папке

Сообщение megaloman »

Держать файл в который записывать имена уже обработанных файлов.

Что то типа - if not in(файл) bla bla bla
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Обнаружение новых файлов в папке

Сообщение megaloman »

Создадим где-нибудь служебную папку (лишь бы были там права на запись), будем просматривать ваш инбокс (папка в которую время от времени падают файлы) и по мере обработки в нём файлов будем создавать в служебной папке служебные файла с именами обработанных файлов с добавлением расширения .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

Re: CMD/BAT - [решено] Обнаружение новых файлов в папке

Сообщение Elven »

megaloman, моложе. Накапливаются не бесконечно, периодически удаляются все вместе. Но вот удаляются они в довольно рандомное время...

NickM, тоже думал в эту сторону.

megaloman, весьма отлично. спасибо.
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Обнаружение новых файлов в папке

Сообщение megaloman »

Elven, Вот еще вариант в сторону NickM

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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

Re: CMD/BAT - [решено] Обнаружение новых файлов в папке

Сообщение megaloman »

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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»