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

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

Ответить
Настройки темы
CMD/BAT - [решено] Батник для сравнения файлов

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


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


Конфигурация

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


Всем привет!

Оч нужна ваша помощь.

Нужен батник для сравнения 2 х файлов по содержимому. Например с фтп копирую файлы, например в с:\tmp\, его копия копируется в архив. Например если в какой нибудь файлик в с:\tmp кто нибудь внес изменения, цифры например поменял или текст какой, то этот файлик нужно переместить в папку c:\error, а другие файлы переместить в папку с:\in и так циклически.

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

Отправлено: 12:34, 13-02-2013

 

Ветеран


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

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


orgia, научитесь уже пользоваться тэгом [code].
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:42, 19-02-2013 | #21



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

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


Ветеран


Contributor


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

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


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

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


Последний раз редактировалось megaloman, 20-02-2013 в 19:56.


Отправлено: 14:04, 20-02-2013 | #22


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


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

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


Благодарю, попробую внедрить Ваш батник в свой. И еще просьба подсказать. Как корректней указать путь к архивной папке в Вашем батнике. В
вашем Set TmpArc=D:\TmpArc а мне нужно X:\\Appl\Archive\ГГММДД\out\*.* вот до сюда. И как обработает батник файлы, если сначала упадут файлы Set TmpFtp=D:\Tmp, затем Set TmpArc=D:\TmpArc. Если эти файлы моим батником подтянутся еще раз он сравнение корректно сделает?

Отправлено: 15:12, 21-02-2013 | #23


Ветеран


Contributor


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

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


Код: Выделить весь код
Set TmpArc=X:\Appl\Archive\%Date:~8,2%%Date:~3,2%%Date:~0,2%\out
Цитата:
если сначала упадут файлы Set TmpFtp=D:\Tmp, затем Set TmpArc=D:\TmpArc. Если эти файлы моим батником подтянутся еще раз он сравнение корректно сделает?
- не очень понятно, но условие задачи таково: если файлы одинаковы, хоть сто раз они придут, сравнение будет правильным. Лишь бы к моменту сравнения они были. Сложно говорить конкретнее, как моё решение вмонтируется в Ваш батник - я его не разбирал.

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


Отправлено: 17:26, 21-02-2013 | #24


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


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

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


большое спасибо за помосчь!!! Ошибка при проверке ошибка FC: cannot open F:\Archive\130305\out\I0505805 - no such file or folder cannot be found. Доступ есть. Может из за того что диск подмапенный?

Отправлено: 12:32, 05-03-2013 | #25



Moderator


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

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


Цитата orgia:
cannot open F:\Archive\130305\out\I0505805 - no such file or folder cannot be found. Доступ есть. Может из за того что диск подмапенный?
Может, попробуйте задать параметр EnableLinkedConnections и перезагрузиться.

Отправлено: 12:37, 05-03-2013 | #26


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


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

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


неа, не помогло. тем более решение для 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
)
)

Отправлено: 13:11, 05-03-2013 | #27


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


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

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


:CompMove
If Not Exist "%2" GoTo :Eof

- не работает зараза. обработка на этом заканчивается всего батника, дальше не обрабатывает.

Отправлено: 12:35, 06-03-2013 | #28


Ветеран


Contributor


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

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


В спешке отвечал на Ваше 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
	)

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

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

Отправлено: 16:41, 06-03-2013 | #29


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


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

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


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

Отправлено: 07:38, 07-03-2013 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - БАтник для переноса файлов и обратно saha1010 Скриптовые языки администрирования Windows 3 04-09-2011 11:15
CMD/BAT - [решено] батник для копирования файлов из ряда поддиректорий xumuk032 Скриптовые языки администрирования Windows 3 27-04-2010 21:23
Прочие - Программа для сравнения файлов в различных каталогах shadowmaster63 Программное обеспечение Windows 3 14-04-2010 10:28
Алгоритм сравнения бинарных файлов Savant Программирование и базы данных 2 04-05-2005 09:57




 
Переход