Имя пользователя:
Пароль:
 

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

Ветеран


Contributor


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

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


orgia, Мне не удалось повторить Вашу ситуацию, было бы полезным получить от Вас живые файлы. Попробуйте вариант
Код: Выделить весь код
@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

If Not %~z1==%~z2 (
	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
)
Я, кроме того, сделал решение более эффективным. При сравнении больших отличающихся файлов команда fc работает долго. Я сделал предварительный контроль длины файла. Если длины файлов не совпадают - значит они разные. Если не получится и с этим решением, сделайте для отладки Echo On, уберите перенаправления вывода >nul и просмотрите ошибочные сообщения. До возможной причины аварийного сообщения в предыдущем решении пока не докапывался, такое ощущение, что моё решение находится внутри внешнего цикла другого батника.

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


Последний раз редактировалось megaloman, 16-02-2013 в 13:40.


Отправлено: 13:22, 16-02-2013 | #13