Windows CMD находит дубликаты файлов на двух дисках

Windows CMD находит дубликаты файлов на двух дисках

У меня есть два диска, скажем, диск A (F:) и диск B (G:). Однажды я скопировал все содержимое диска B на диск A. Но после этого на диск B были добавлены некоторые новые файлы и папки. Я хотел бы удалить дубликаты файлов и папок с диска B и оставить только те, которых нет на диске A.

Я попробовал команду ниже, чтобы просто проверить, найдены ли дубликаты, но она не работает так, как я хотел, потому что в переменной указан полный путь %%a. Конечно, вывод, который есть сейчас, echo %%aбудет заменен эквивалентом DEL, если он сработает.

@echo off
for /F "tokens=*" %%a in ('dir G:\*.* /b /s') do if not exist "F:\%%a" echo %%a >> C:\Users\billy\Desktop\files.txt
pause

Если я уберу /sпереключатель из dirкоманды, то она сработает, поскольку %%aвместо полного пути будет указано только имя файла, но она не будет работать рекурсивно для подпапок, поэтому она не так уж и полезна.

решение1

@echo off
for /F "delims=" %%a in ('
  dir G:\*.* /b /s /A:-D
  ') do if not exist "F:%%~pnxa" echo del "%%~a" >> C:\Users\billy\Desktop\files.txt
pause

Объяснение:

  • /A:-Dисключить каталоги (папки) из списка, так как последующая delкоманда удалит файлы вместо каталога (согласно del /?: если указан каталог, все файлы в нем будут удалены, но сама папка не будет удалена);
  • обрабатывать папки отдельно: используйте другой for /Fпротив dirс /A:Dпереключателем, но в этом случае используйте rdвместо delкоманды toудалить папку; используется rd /Sдля удаления всего дерева папок (всех файлов и подпапок, кроме самой папки).
  • %%~pnxaрасширяется %%aдо полногопуть + имя + расширениевключая ведущий \(без G:спецификации диска);
  • del "%%~a"полный путь в двойных кавычках для правильной обработки путей с пробелами;
  • Я рекомендую "delims="вместо этого "tokens=*"правильно обрабатывать возможные начальные пробелы в именах файлов (это могло бы иметь место и без /Sфлага);
  • рассмотрите дополнительные параметры командной строки (см. del /?и rd /?).

Связанный контент