Войти

Показать полную графическую версию : [решено] Батник для сравнения файлов


Страниц : 1 [2]

Iska
19-02-2013, 11:42
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
)
)
Мне гораздо легче (и интереснее - главный побудительный мотив отвечать на вопросы) получить чёткое описание проблемы и предложить решение. Постигать логику постановки задачи по приведенному коду долго, и это не по мне

orgia
21-02-2013, 15:12
Благодарю, попробую внедрить Ваш батник в свой. И еще просьба подсказать. Как корректней указать путь к архивной папке в Вашем батнике. В
вашем 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. Если эти файлы моим батником подтянутся еще раз он сравнение корректно сделает? - не очень понятно, но условие задачи таково: если файлы одинаковы, хоть сто раз они придут, сравнение будет правильным. Лишь бы к моменту сравнения они были. Сложно говорить конкретнее, как моё решение вмонтируется в Ваш батник - я его не разбирал.

orgia
05-03-2013, 12:32
большое спасибо за помосчь!!! Ошибка при проверке ошибка 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) и перезагрузиться.

orgia
05-03-2013, 13:11
неа, не помогло. тем более решение для 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
)
)

orgia
06-03-2013, 12:35
: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
)

orgia
07-03-2013, 07:38
Спасибо, работает. И такой вопрос еще. я вызываю на исполнение Ваш файлик командой call. И ситуация такая, что батник уменя циклический, и постоянно вызывается даже при отсутствии во входном каталоге каких либо файлов. В принципе ничего фатального в этом нет, но хотелось бы причесать. Как вызывать ваш батник тлько при наличии во входном каталоге? У мну што то не совсем все получается.????

megaloman
07-03-2013, 10:11
Как вызывать ваш батник тлько при наличии во входном каталоге?-не вижу никакого в этом смысла, цикл For при отсутствии файлов работать не будет. Можно, конечно, написать If Exist Путь\Маска_имен_файлов , но при этом маску не следует указывать *.*, так как по маске *.* такой If проверит не наличие файла, а наличие директории Путь. Единственное, если батник, вызываемый Call, хранится где-то в другом месте, но лучше тогда его включить в текст основного скрипта, добавив первой строкой метку, по которой сошлётесь в команде Call, например, :Kuku, и последней строкой GoTo :Eof

orgia
02-04-2013, 14:01
Всем спасибо!




© OSzone.net 2001-2012