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

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

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

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


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


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

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


Всем привет!

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

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

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

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

 

Ветеран


Contributor


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

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


Для этого существует команда fc
Синтаксис команды можно посмотреть fc /?
При отсутствии различий в файлах она возврвщает ErrorLevel=0, что можно потом проанализировать и предпринять дальнейшие действия.
Код: Выделить весь код
@echo off
cls
fc /B 1.txt 2.txt >nul 
Echo %ErrorLevel%

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


Последний раз редактировалось megaloman, 15-02-2013 в 19:21. Причина: Исправлено после замечания Iska

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

Отправлено: 09:49, 14-02-2013 | #2



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

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


Ветеран


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

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


Цитата megaloman:
Код: Выделить весь код
fc /B 1.txt 2.txt >nul 1>nul 2>nul
»
Зачем дважды перенаправляете stdout?
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:07, 15-02-2013 | #3


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


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

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


Спасибо за помощь, мне нужно сравнить ряд файлов в этих папках, туда сваливаю несколько файлов разных одновременно и сравнивать надо те что на с:\tmp\ c другими которые в архиве. В случае несовпадения одного файла из нескольких, этот файл нужно в еррор свалить а которые не изменились оставить. Я пробовал с помощью программы comp.exe. Она сравнивает их корректно, но я не могу применить результат.
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:09, 15-02-2013 | #4


Ветеран


Contributor


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

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


orgia, Я понял так, что сравнивать надо файл в TMP и файл с таким же именем в архиве? Это можно сделать так
Код: Выделить весь код
@echo off

Set TmpFtp=D:\Tmp
Set TmpArc=D:\TmpArc
Set TmpErr=D:\TmpErr
Set TmpIn=D:\TmpIn

SetLocal EnableExtensions EnableDelayedExpansion

FOR %%f IN (%TmpFtp%\*.*) DO (
	fc /B "%%f" "%TmpArc%\%%~nxf" >nul
        If !ErrorLevel!==0 (
		Move /Y "%%f" "%TmpIn%\" >nul
	) Else (
		Move /Y "%%f" "%TmpErr%\" >nul
	)
)
Я не рассматривал случай отсутствия файла в архиве, так как
Цитата:
Например с фтп копирую файлы, например в с:\tmp\, его копия копируется в архив
Если файла в архиве нет, то из TMP он свалится в Err.
Или Вам надо каждый файл в tmp сравнить со всеми файлами в архиве и найти / не найти совпадение?

Iska, Не стреляйте в пианиста, он играет, как умеет. Уровень Ваших знаний выше. Спасибо за помощь

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


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

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

Отправлено: 19:55, 15-02-2013 | #5


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


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

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


Цитата megaloman:
Если файла в архиве нет, то из TMP он свалится в Err.
Или Вам надо каждый файл в tmp сравнить со всеми файлами в архиве и найти / не найти совпадение? »
Во первых, спасибо за содействие.
Файлы копируются из одного места в 2 разных папки. У меня есть требование перед обработкой их на c:\tmp проверить на идентичность их в архиве. И только после сравнения кидать на обработку. Как то так.

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


Ветеран


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

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


Цитата megaloman:
Iska, Не стреляйте в пианиста, он играет, как умеет. Уровень Ваших знаний выше.»
Я бы так не сказал, коллега .

Отправлено: 05:08, 16-02-2013 | #7


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


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

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


спасибо, но он некорректно работат. при 2х одинаковых файлах в in не переносит.
пишет достигнут уровень рекурсии, максимальный возможный для данной команды setlocal
и на этом все.

Последний раз редактировалось orgia, 16-02-2013 в 11:23.


Отправлено: 10:44, 16-02-2013 | #8


Аватара для Tco 03

Пользователь


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

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


megaloman
Очень хороший код, как раз то, что я искал! А возможно ли создать папки автоматически? То есть в папке Tmp находятся не только файлы, но ещё и другие файлы в подпапках. И создать точно такую же структуру папок, в папках: TmpArc, TmpErr, TmpIn, и потом удалить все папки (с подпапками (вместе с файлами)), кроме папки: TmpErr
Ну или на крайний случай, как создать структуру папок мануально и потом их удалить? Сорри если туплю - я не силён в написании bat-ников.

Отправлено: 11:07, 16-02-2013 | #9


Ветеран


Contributor


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

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


orgia, Что делает моё решение:
Сравнивает файл из D:\Tmp с одноименным файлом в архиве D:\TmpArc.
Если файлы совпадают, перемещаю файл из D:\Tmp в D:\TmpIn
Иначе в папку D:\TmpErr
И так циклически. Еще раз проверил - работает, переносит всё куда надо в зависимости от совпадения/несовпадения. Возможно, Вы некорректно указываете пути в батнике - самая распространённая проблема, когда в определении пути в конце имеются пробелы. Для отладки попробуйте вариант
Код: Выделить весь код
@echo on
cls

SetLocal EnableExtensions EnableDelayedExpansion

FOR %%f IN (D:\Tmp\*.*) DO (
	fc /B "%%f" "D:\TmpArc\%%~nxf"
        If !ErrorLevel!==0 (
		Move /Y "%%f" "D:\TmpIn\"
	) Else (
		Move /Y "%%f" "D:\TmpErr\"
	)
pause
)
Проанализируйте, есть ли там сообщения об ошибках. Сообщите.

И вообще, смысл задачи ускользает.
В норме у Вас пара файлов с одинаковыми именами в тмп и архиве, в норме они идентичны.
В тмп пользователь может изменить файл, в архиве - эталон.
Если в тмп пришел файл, одновременно он пришел и в архив (по условию Вашей задачи)
Нам всё равно, что творится с содержимым файла в тмп, главное, пришел файл, его надо обработать, и файл для обработки будем копировать в Ин из архива (где заведомо правильный файл). А в ТМП файл просто удаляем. Смысла сравнивать файлы вообще не вижу.

Tco 03, Возможно. Но мне надо четкая постановка.

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


Отправлено: 11:26, 16-02-2013 | #10



Компьютерный форум 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




 
Переход