Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Обнаружение новых файлов в папке

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

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 18:12, 13-04-2016

 

Аватара для NickM

Ветеран


Contributor


Сообщения: 4242
Благодарности: 995

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:27, 13-04-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:59, 14-04-2016 | #3


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


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

Отправлено: 13:01, 14-04-2016 | #4


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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 в 21:09.


Отправлено: 13:32, 14-04-2016 | #5


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:50, 14-04-2016 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Обнаружение новых файлов в папке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Копирование новых файлов Andrey947 Скриптовые языки администрирования Windows 3 21-03-2016 22:17
PowerShell - [решено] Копирование новых файлов Ololosh Скриптовые языки администрирования Windows 2 09-04-2015 10:42
CMD/BAT - Копирование новых файлов Доктор Ливси Скриптовые языки администрирования Windows 1 08-11-2010 12:37
Интернет - [решено] Обнаружение новых сетей Brother Micro Microsoft Windows 7 3 11-08-2010 09:36
Появление новых файлов ummnikk Хочу все знать 9 26-10-2005 05:32




 
Переход