Показать полную графическую версию : [решено] Батник для сравнения файлов
orgia, научитесь уже пользоваться тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code).
megaloman
20-02-2013, 14:04
orgia, я не вчитывался в Ваш код, я не читатель, а писатель :) но как вариант моего решения для Вашей постановки @echo off
Set TmpFtp=D:\Tmp
Set TmpArc=D:\TmpArc
Set TmpErr=D:\TmpErr
Set TmpIn=D:\TmpIn
Set Mask1=I%Date:~0,2%05805.???
Set Mask2=L01???????????.0??
Set Mask3=5005805?????????????????.dat
Set Mask=5005805000%Date:~0,2%???.ED
Move /Y "%TmpFtp%\%Mask%" "%TmpIn%\" >nul
CD /D "%TmpFtp%"
SetLocal EnableExtensions EnableDelayedExpansion
FOR %%f IN ("%Mask1%" "%Mask2%" "%Mask3%") DO (
fc /B "%%f" "%TmpArc%\%%~nxf" >nul
If !ErrorLevel!==0 (
Move /Y "%%f" "%TmpIn%\" >nul
) Else (
Move /Y "%%f" "%TmpErr%\" >nul
)
)
Мне гораздо легче (и интереснее - главный побудительный мотив отвечать на вопросы) получить чёткое описание проблемы и предложить решение. Постигать логику постановки задачи по приведенному коду долго, и это не по мне
Благодарю, попробую внедрить Ваш батник в свой. И еще просьба подсказать. Как корректней указать путь к архивной папке в Вашем батнике. В
вашем Set TmpArc=D:\TmpArc а мне нужно X:\\Appl\Archive\ГГММДД\out\*.* вот до сюда. И как обработает батник файлы, если сначала упадут файлы Set TmpFtp=D:\Tmp, затем Set TmpArc=D:\TmpArc. Если эти файлы моим батником подтянутся еще раз он сравнение корректно сделает?
megaloman
21-02-2013, 17:26
Set TmpArc=X:\Appl\Archive\%Date:~8,2%%Date:~3,2%%Date:~0,2%\out если сначала упадут файлы Set TmpFtp=D:\Tmp, затем Set TmpArc=D:\TmpArc. Если эти файлы моим батником подтянутся еще раз он сравнение корректно сделает? - не очень понятно, но условие задачи таково: если файлы одинаковы, хоть сто раз они придут, сравнение будет правильным. Лишь бы к моменту сравнения они были. Сложно говорить конкретнее, как моё решение вмонтируется в Ваш батник - я его не разбирал.
большое спасибо за помосчь!!! Ошибка при проверке ошибка FC: cannot open F:\Archive\130305\out\I0505805 - no such file or folder cannot be found. Доступ есть. Может из за того что диск подмапенный?
Petya V4sechkin
05-03-2013, 12:37
cannot open F:\Archive\130305\out\I0505805 - no such file or folder cannot be found. Доступ есть. Может из за того что диск подмапенный?
Может, попробуйте задать параметр EnableLinkedConnections (http://support.microsoft.com/kb/937624/en-us) и перезагрузиться.
неа, не помогло. тем более решение для 7. обкатываю на 7 батник а работать бкит на xp/
вот этим батником обрабатывается
@echo off
Set TmpFtp=D:\Tmp
Set TmpArc=F:\ARCHIVE\%Date:~8,2%%Date:~3,2%%Date:~0,2%\out
Set TmpErr=D:\TmpErr
Set TmpIn=D:\TmpIn
Set Mask1=I%Date:~0,2%05805.???
Set Mask2=L01???????????.0??
Set Mask3=5005805?????????????????.dat
Set Mask=5005805000%Date:~0,2%???.ED
Move /Y "%TmpFtp%\%Mask%" "%TmpIn%\" >nul
CD /D "%TmpFtp%"
SetLocal EnableExtensions EnableDelayedExpansion
FOR %%f IN ("%Mask1%" "%Mask2%" "%Mask3%") DO (
fc /B "%%f" "%TmpArc%\%%~nxf" >nul
If !ErrorLevel!==0 (
Move /Y "%%f" "%TmpIn%\" >nul
) Else (
Move /Y "%%f" "%TmpErr%\" >nul
)
)
:CompMove
If Not Exist "%2" GoTo :Eof
- не работает зараза.:) обработка на этом заканчивается всего батника, дальше не обрабатывает.
megaloman
06-03-2013, 16:41
В спешке отвечал на Ваше PM на автопилоте (задачу уже не помнил) Попробуйте, тестировал, работает@echo off
Set TmpFtp=D:\Tmp
Set TmpArc=D:\TmpArc
Set TmpErr=D:\TmpErr
Set TmpIn=D:\TmpIn
FOR %%f IN (%TmpFtp%\*.*) DO Call :CompMove "%%f" "%TmpArc%\%%~nxf"
GoTo :Eof
:CompMove
Set L=1
If Not Exist %2 Set L=0
If %L% EQU 1 If Not %~z1==%~z2 Set L=0
If %L% EQU 0 (
If Not Exist %TmpErr% Md %TmpErr%
Move /Y %1 %TmpErr% >nul
GoTo :Eof
)
fc /B %1 %2 >nul
If %ErrorLevel%==0 (
Move /Y %1 "%TmpIn%\" >nul
) Else (
Move /Y %1 "%TmpErr%\" >nul
)
Спасибо, работает. И такой вопрос еще. я вызываю на исполнение Ваш файлик командой call. И ситуация такая, что батник уменя циклический, и постоянно вызывается даже при отсутствии во входном каталоге каких либо файлов. В принципе ничего фатального в этом нет, но хотелось бы причесать. Как вызывать ваш батник тлько при наличии во входном каталоге? У мну што то не совсем все получается.????
megaloman
07-03-2013, 10:11
Как вызывать ваш батник тлько при наличии во входном каталоге?-не вижу никакого в этом смысла, цикл For при отсутствии файлов работать не будет. Можно, конечно, написать If Exist Путь\Маска_имен_файлов , но при этом маску не следует указывать *.*, так как по маске *.* такой If проверит не наличие файла, а наличие директории Путь. Единственное, если батник, вызываемый Call, хранится где-то в другом месте, но лучше тогда его включить в текст основного скрипта, добавив первой строкой метку, по которой сошлётесь в команде Call, например, :Kuku, и последней строкой GoTo :Eof
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.