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

Elven 13-04-2016 18:12 2625805

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

NickM 13-04-2016 18:27 2625809

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

megaloman 14-04-2016 11:59 2626013

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

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

megaloman 14-04-2016 13:32 2626044

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

@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 2626048

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



Время: 05:12.

Время: 05:12.
© OSzone.net 2001-