Windows CMD encuentra archivos duplicados entre dos unidades de disco

Windows CMD encuentra archivos duplicados entre dos unidades de disco

Tengo dos unidades, digamos unidadA (F:) y unidadB (G:). Una vez copié todo el contenido de la unidad B en la unidad A. Pero después de eso, a la unidad B se le agregaron algunos archivos y carpetas nuevos. Me gustaría eliminar los archivos y carpetas duplicados de la unidad B y dejar solo aquellos que no existen en la unidad A.

Probé el siguiente comando solo para verificar si se encuentran duplicados, pero no funciona como quería porque tiene la ruta completa en la variable %%a. Eso sí, la salida que tiene ahora echo %%aserá sustituida por una DELequivalente en caso de que funcione.

@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

Si elimino el /sinterruptor del dircomando, funciona porque %%asolo tiene el nombre del archivo en lugar de la ruta completa, pero no funciona de forma recursiva para las subcarpetas, por lo que no es tan útil.

Respuesta1

@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

Explicación:

  • /A:-Dexcluir directorios (carpetas) de la lista, ya que delel comando posterior eliminaría archivos en lugar de directorios (según del /?: Si se especifica un directorio, se eliminarán todos los archivos dentro del directorio, pero no se eliminará la carpeta en sí);
  • Trate las carpetas por separado: use otro for /Fcontra dircon /A:Del interruptor, pero en este caso use rden lugar del delcomando paraeliminar una carpeta; utilícelo rd /Spara eliminar un árbol de carpetas completo (todos los archivos y subcarpetas además de la carpeta misma).
  • %%~pnxase expande %%aal máximoruta + nombre + extensiónincluyendo un interlineado \(sin G:especificación de disco);
  • del "%%~a"ruta completa entre comillas dobles para tratar adecuadamente las rutas con espacios;
  • Recomiendo "delims="en lugar de "tokens=*"tratar adecuadamente los posibles espacios iniciales en los nombres de archivos (esto podría ocurrir sin /Sbandera);
  • considere cambios de línea de comando adicionales (consulte del /?y rd /?).

información relacionada