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

Показать сообщение отдельно

Новый участник


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

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


Т.к. время поджимало, пришлось самому засесть и покапаться взял за основу пару решений похожих задач, может местами коряво и не слишком изящно, но вот что получилось:


Код: Выделить весь код
@echo off
cls
set bad=C:\BAD\%date%
set sort=C:\SORT
set log=%bad%\Offline_logs_%date%.txt

rem ----------------------------- Тест на доступ к исходной папке
if not exist "%bad%\*.*" (
   echo Directory is not exist: %bad%
   GoTo :Eof
)

rem ----------------------------- Если папки назначения нет - создать, не получается - выйти.
if not exist "%sort%\*.*" (mkdir %sort%  || goto :eof)

rem ----------------------------- Вызов поиска поочередно для каждого значения
Call :FindData 1234
Call :FindData 5678
Call :FindData 9012
Call :FindData 3456
Call :FindData 7890
GoTo :Eof


:FindData
rem ----------------------------- Если нет расширенной папки назначения (с кодом значения) - создать, не получается - выйти.
if not exist "%sort%\%1\*.*" (mkdir %sort%\%1 || goto :eof)

rem ----------------------------- Для каждого файла в папке вызываем процедуру поиска в нем заданного значения
FOR %%i IN ("%bad%\*.*") DO Call :SearchInFile %%i %1
GoTo :eof

rem ----------------------------- Поиск заданного значения, передаваемого во втором параметре, в файле, передаваемом в первом параметре
rem ----------------------------- Если находим - перемещаем файл и связанный с ним INFO
:SearchInFile
If /I %~x1==.INFO GoTo :eof Else (
	rem echo Searching %2 in %1
	For /F "eol=Z skip=2 delims=| tokens=1,2" %%j in (%1) do (
	if /I %%j == TO (if %%k==%2 (
		echo Find! %%k in %~nx1
		If NOT EXIST "%~dpn1.INFO" ((Echo [%TIME%] [%2] Ошибка! Для файла %1 не найден соответстующий файл .INFO >> %log%)&(GoTo :Eof)) else (
		copy /Y "%1" "%sort%\%2"
		If NOT Exist "%sort%\%2\%~nx1" (Echo [%TIME%] [%2] Ошибка! Не удалось скопировать файл %1 >> %log%) Else (
			Echo [%TIME%] [%2] %1 успешно скопирован в папку  %sort%\%2 >> %log%
			del "%1" /Q
			If EXIST "%1" (Echo [%TIME%] [%2] Предупреждение! Не удалось удалить файл %1 >> %log%) else (Echo [%TIME%] [%2] %1 успешно удален >> %log%)
		)
		copy /Y "%~dpn1.INFO" "%sort%\%2"
		If NOT Exist "%sort%\%2\%~n1.INFO" (Echo [%TIME%] [%2] Ошибка! Не удалось скопировать %~dpn1.INFO >> %log%) Else (
			Echo [%TIME%] [%2] %~dpn1.INFO успешно скопирован в папку  %sort%\%2 >> %log%
			del "%~dpn1.INFO" /Q
			If EXIST "%~dpn1.INFO" (Echo [%TIME%] [%2] Предупреждение! Не удалось удалить файл %~dpn1.INFO >> %log%) else (Echo [%TIME%] [%2] %~dpn1.INFO успешно удален >> %log%)
		)
		)
	)
	)
	)
)
p.s. после уточнения задания, второй вариант с работой по сети не актуален.

Отправлено: 17:12, 02-10-2010 | #4