res2001
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору artem9p Ну да были косяки, но я же предупредил, что не тестировал Вот погонял слегка, кой чего поправил: Код: @echo off set "screensaverdir=C:\Temp\" ::Сравниваем файлы и удаляем одинаковые for %%a in (%screensaverdir%*.*) do for %%b in (%screensaverdir%*.*) do ( if "%%~a" neq "%%~b" (echo n | 1>nul 2>&1 comp "%%~a" "%%~b" && echo del /f /q "%%~b") ) ::переименовываем set "count=1" for /f "tokens=* delims=" %%a in ('dir /b /a-d %screensaverdir%*.*') do ( call set "fn=00000%%count%%" call ren "%screensaverdir%%%~a" "%%fn:~-6%%%%~xa" set /a "count+=1" ) | сам батник не клади в каталог с файлами, хотя не должен удалять сам себя. Не обращай внимания на то что в случае наличия одинаковых файлов при тесте будут выводится команды удаления обоих одинаковых файлов, когда будет реальное удаление, то второй файл удалится, а первый останется. На счет быстродействия - у меня быстро прогнало на 10 файлах, правда файлы мелкие все. Добавлено: Да утилита fc.exe работает долго на более или менее больших файлах. Натравил батник на каталог с 80 фотками - лопатил долго, не стал ждать до конца, прибил. Значит надо искать другой способ сравнения. На ум приходит следующее: составить список файлов с вычисленными контрольными суммами, и по этому списку уже смотреть наличие файлов с одинаковыми контрольными суммами. Будет быстрее, но 8000 файлов все равно долго обрабатывать будет, к тому же нужна сторонняя утилита для вычисления контрольных сумм. Добавлено: rhash по моему довольно быстро работает, к тому же умеет сразу делать список в нужном формате и поддерживает разные контрольные суммы. Добавлено: Изменил код выше. Использовал утилиту comp - она пошустрей работает. | Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 13:18 20-10-2011 | Исправлено: res2001, 13:50 20-10-2011 |
|