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

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

Ответить
Настройки темы
Любой язык - [решено] Сравнение файлов в каталогах.

Аватара для NikolayHAOS

Старожил


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

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


Всем доброго времени суток.
Прочитал все похожие темы. но сам что-то дотумкать немогу. Потому прошу о помощи.
Есть два каталога с файлами. например D:\1 и D:\2.
Нужно сравнить файлы из 1 и 2 между собой и удалить все одинаковые из каталога 2
Файлы маленькие по размеру, если возможно сравнение по CRC или MD5, то вообще отлично.

Отправлено: 11:07, 11-11-2013

 

Ветеран


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

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


Цитата NikolayHAOS:
НО какова вероятность изменения файла с сохранением изначального размера? »
NikolayHAOS, Вы неправильно ставите вопрос.
читать дальше »
Любая ненулевая вероятность совпадения ставит жирный крест на использовании такого метода. Даже в случае MD5 она не нулевая (хоть и весьма, весьма низкая), а уж при попытках основывать отбор посредством сравнения по размерам… Даже не пытайтесь делать отсев файлов по такому слабому критерию — чревато печальными последствиями.
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:50, 12-11-2013 | #11



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

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


Аватара для NikolayHAOS

Старожил


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

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


Iska, Абсолютно согласен с вами.
Как правильно запустить скрипт, подскажите пожалуйста. Бьюсь бьюсь весь инет перерыл, ан нет все равно ошибка, мобыть в скрипте чего не так?

Отправлено: 08:54, 12-11-2013 | #12


Ветеран


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

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


Выше я написал и тов. Iska дал ссылку, что требуется версия PowerShell 3.0 и выше.

Посмотреть версию PowerShell - $PSVersionTable.PSVersion
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:59, 12-11-2013 | #13


Аватара для NikolayHAOS

Старожил


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

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


Kazun, Агромное спасибо вы просто гений, все заработало.
Iska, Почему то считал что Framework 3.0 включен в 4.5.1 - ошибся. Установил и все отлично.
Цитата Iska:
чревато печальными последствиями. »
И не говорите, подредактировал файл, поставил знак вопроса заместо точки, размер тот же, а вот хеш нет :-)
Всем агромное спасибо.
З.Ы. Жаль, что сам нефига не понимаю в этом скрипте, ща попробую изменить пути на свои. И отпишу.

Все работает. Благодарю.

Отправлено: 14:49, 12-11-2013 | #14


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


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

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


NikolayHAOS, я говорил про кодировку самого bat-файла. Кодировка сравниваемых файлов безразлична. Они могут быть даже двоичные, только надо добавить после команды fc ключ /b:
Код: Выделить весь код
for %%f in (d:\2\*.*) do (
  fc /b "%%f" "d:\1\%%~nxf"|find "FC: различия не найдены"
  if not errorlevel 1 del "%%f"
)
Iska, по крайней мере, это решение значительно компактнее, чем то, что предложил Kazun.
Поскольку bat - это язык файло-ориентированный, многие операции над файлами в нём программируются намного проще, чем в других. Поэтому я не считаю это садомазохизмом.

-------
Разумный человек приспосабливается к миру, неразумный пытается приспособить мир к себе. Поэтому прогресс делают люди неразумные. (Дж. Б. Шоу)

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

Отправлено: 19:24, 12-11-2013 | #15


Ветеран


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

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


Гуллипут, дело, разумеется, не в Вашем коде, а в особенностях сравнения «fc.exe»: в общем случае сравнение по хэшам выигрывает в производительности.

Отправлено: 20:06, 12-11-2013 | #16


Аватара для NikolayHAOS

Старожил


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

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


Гуллипут, Спасибо и ваш метод отлично работает, И в мне легче разобраться в вашем коде, так как его почти там нет :-).

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


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


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

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


Цитата Iska:
Гуллипут, дело, разумеется, не в Вашем коде, а в особенностях сравнения «fc.exe»: в общем случае сравнение по хэшам выигрывает в производительности. »
Сомневаюсь. Ведь для вычисления хэша надо всё равно прочитать весь файл. Выигрыш только за счёт операций сравнения, зато вычисление хэша занимает больше времени, чем просто чтение строк из файла. Хэш полезен в случае, когда он вычисляется каждый раз при изменении хэшируемого объекта, с тем, чтобы в дальнейшем при сравнении уже сравнивать только хэши. То есть затраты времени "распределяются" более равномерно.
Правда, я не разбирался в алгоритме, который выложил Kazun, может, он так и делает ? Но для этого ему надо ставить обработчик на событие изменения файлов в каталоге. В принципе, реально, я это делал на Delphi, но не знаю, может ли это PowerShell. В нём я не разбираюсь: пару лет назад проглядел одну книжку, но на работе это не используется, поэтому и благополучно забыл прочитанное.

-------
Разумный человек приспосабливается к миру, неразумный пытается приспособить мир к себе. Поэтому прогресс делают люди неразумные. (Дж. Б. Шоу)


Последний раз редактировалось Гуллипут, 13-11-2013 в 08:02. Причина: Дополнение


Отправлено: 07:50, 13-11-2013 | #18


Ветеран


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

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


Цитата Гуллипут:
Сомневаюсь. Ведь для вычисления хэша надо всё равно прочитать весь файл. »
Гуллипут, для сравнения — тоже. И, в отличие от сравнения по хэшам, читать, в случае сравнения MxN файлов, каждый из M придётся в худшем случае ровно N раз (вместо одного раза). И так же читать M раз каждый из N файлов. Вот почему «fc.exe» хуже подходит сравнения по хэшам. Можно предварительно сравнивать по размерам, это, в общем случае, даст заметную экономию. Но именно в некоем «общем случае», а сравнение ведь, как правило, проводится отнюдь не для неких усреднённых «общих случаев», а конкретно там, где заранее предполагается наличие какого-то числа одинаковых файлов.

CloneSpy умеет работать с предварительно рассчитанными им и сохранёнными наборами хэшей файлов. Это удобно в случае, аналогичном рассматриваемому — когда неизменный или редко обновляемый набор файлов сравнивается со вновь поступающими наборами файлов.

Отправлено: 10:43, 17-11-2013 | #19


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


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

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


Iska, я сравниваю не каждый файл с каждым, а файлы с совпадающими именами. Поскольку "одинаковость файлов" я понял, как совпадение не только содержимого, но и имён.

-------
Разумный человек приспосабливается к миру, неразумный пытается приспособить мир к себе. Поэтому прогресс делают люди неразумные. (Дж. Б. Шоу)

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

Отправлено: 21:56, 18-11-2013 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Поиск и проверка сегодняшних файлов в динамических каталогах rudimko Скриптовые языки администрирования Windows 4 10-09-2012 20:55
CMD/BAT - [решено] Создание файлов в несуществующих каталогах Bruce Wayne Скриптовые языки администрирования Windows 3 26-07-2012 21:35
CMD/BAT - CMD-файл, обеспечивающий обмен файлов в двух каталогах stAlexey Скриптовые языки администрирования Windows 5 23-10-2010 19:46
Прочие - Программа для сравнения файлов в различных каталогах shadowmaster63 Программное обеспечение Windows 3 14-04-2010 10:28
Сравнение файлов Guest Программирование и базы данных 6 24-04-2004 04:47




 
Переход