Цитата Lil Crazy:
А как это написать в коде скрипта? »
|
вариант с использованием
md5deep:
Код:
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion
:NUM
::--------------------------------
:: Количество каталогов для поиска
::--------------------------------
Set /P $NUM="Input number of folders: "
Set $IDX=1& Set /A $NUM+=0
::--------------------------------
If %$NUM% EQU 0 GoTo NUM
:DIR
::---------------------------
:: Имена каталогов для поиска
::---------------------------
Set /P $_%$IDX%="Input path to folder %$IDX% for search: "
Call Set $T=%%$_%$IDX%%%
If Exist %$T% Set /A $IDX+=1
::---------------------------
If %$IDX% LEQ %$NUM% GoTo DIR
Echo Удаление временных файлов...
2>Nul DEL /F/Q *.tmp *.~*
Echo Формирование списка файлов...
For /F "Tokens=1* Delims==" %%a In ('Set $_') Do md5deep -r "%%~b">>"%~n0.~t1"
Echo Сортировка списка...
Sort "%~n0.~t1" /O "%~n0.~t2"
Echo Группировка/обработка списков дублей...
Call :GRP_EX "%~n0.~t2" EX "%~n0.~t3"& Exit
:EX
::===================
:: Обработка списка
:: идентичных файлов
::-------------------
:: %1 - список файлов
::-------------------
Echo -----
Type "%~1"
::===================
GoTo :EOF
:GRP_EX
::====================================================
:: Обработка списка в формате: ключ значение
:: группировка строк, вывод значений во временный файл
:: с последующей передачей на обработку в процедуру.
::----------------------------------------------------
:: %1 - входной файл списка
:: %2 - имя процедуры обработки
:: %3 - имя для рабочего файла
::----------------------------------------------------
SetLocal& Set $F=& Set $A=& Echo _>>"%~1"
For /F "UseBackQ Tokens=1*" %%a In ("%~1") Do (
If Not "!$A!"=="%%~a" (If Not Defined $F (Echo %%~b>"%~3") Else (
Set $F=& Call :%~2 "%~3"& Echo %%~b>"%~3")) Else Set $F=F& Echo %%~b>>"%~3"
Set $A=%%~a)
::====================================================
EndLocal& GoTo :EOF
- имена файлов/каталогов не должны содержать символов "!"
- файлы с русскими буквами в именах обрабатываются, но отображаются знаком "?"
З.Ы. каждое ограничение можно снять ценой усложнения/замедления работы скрипта