Это довольно легко. Вы можете использовать два вложенных цикла for
в командной строке:
for %x in (*) do @(
for %y in (*) do @(
if not "%x"=="%y" @(
fc /b "%x" "%y" >nul && echo "%x" and "%y" are equal
)
)
)
Если вы хотите использовать это в пакетном файле, вам нужно удвоить знаки %
.
Код просто зацикливается дважды на все файлы в текущем каталоге:
for %x in (*) do @(
for %y in (*) do @(
тогда, если два имени файла не равны (потому что тогда мы знаем, что файлы равны)
if not "%x"=="%y" @(
если запускается утилита fc
, которая сравнивает файлы
fc "%x" "%y" >nul && echo "%x" and "%y" are equal
Если fc
имел код выхода 0
, это означает, что файлы были равны (то есть дублированы), и в этом случае echo
после &&
срабатывает. &&
означает «Просто выполните следующую команду, если предыдущая вышла с 0
кодом выхода».
И для 30 файлов это, конечно, достаточно быстро. Однажды я реализовал что-то более сложное в пакете, но этого должно быть достаточно.
ETA: Найдена другая партия; до сих пор нигде публично не объяснялось, но я однажды опубликовал это в Super User .