|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Батник для сравнения файлов |
|
CMD/BAT - [решено] Батник для сравнения файлов
|
Новый участник Сообщения: 16 |
Профиль | Отправить PM | Цитировать Всем привет!
Оч нужна ваша помощь. Нужен батник для сравнения 2 х файлов по содержимому. Например с фтп копирую файлы, например в с:\tmp\, его копия копируется в архив. Например если в какой нибудь файлик в с:\tmp кто нибудь внес изменения, цифры например поменял или текст какой, то этот файлик нужно переместить в папку c:\error, а другие файлы переместить в папку с:\in и так циклически. Заранее благодарю!!! |
|
Отправлено: 12:34, 13-02-2013 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать |
------- Последний раз редактировалось megaloman, 15-02-2013 в 19:21. Причина: Исправлено после замечания Iska Отправлено: 09:49, 14-02-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 03:07, 15-02-2013 | #3 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Спасибо за помощь, мне нужно сравнить ряд файлов в этих папках, туда сваливаю несколько файлов разных одновременно и сравнивать надо те что на с:\tmp\ c другими которые в архиве. В случае несовпадения одного файла из нескольких, этот файл нужно в еррор свалить а которые не изменились оставить. Я пробовал с помощью программы comp.exe. Она сравнивает их корректно, но я не могу применить результат.
|
Отправлено: 06:09, 15-02-2013 | #4 |
Ветеран Сообщения: 2726
|
Профиль | Отправить 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 сравнить со всеми файлами в архиве и найти / не найти совпадение? Iska, Не стреляйте в пианиста, он играет, как умеет. Уровень Ваших знаний выше. Спасибо за помощь |
||
------- Последний раз редактировалось megaloman, 15-02-2013 в 20:06. Отправлено: 19:55, 15-02-2013 | #5 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Файлы копируются из одного места в 2 разных папки. У меня есть требование перед обработкой их на c:\tmp проверить на идентичность их в архиве. И только после сравнения кидать на обработку. Как то так. |
|
Отправлено: 20:22, 15-02-2013 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 05:08, 16-02-2013 | #7 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать спасибо, но он некорректно работат. при 2х одинаковых файлах в in не переносит.
пишет достигнут уровень рекурсии, максимальный возможный для данной команды setlocal и на этом все. |
Последний раз редактировалось orgia, 16-02-2013 в 11:23. Отправлено: 10:44, 16-02-2013 | #8 |
Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать megaloman
Очень хороший код, как раз то, что я искал! А возможно ли создать папки автоматически? То есть в папке Tmp находятся не только файлы, но ещё и другие файлы в подпапках. И создать точно такую же структуру папок, в папках: TmpArc, TmpErr, TmpIn, и потом удалить все папки (с подпапками (вместе с файлами)), кроме папки: TmpErr Ну или на крайний случай, как создать структуру папок мануально и потом их удалить? Сорри если туплю - я не силён в написании bat-ников. |
Отправлено: 11:07, 16-02-2013 | #9 |
Ветеран Сообщения: 2726
|
Профиль | Отправить 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|