Windows CMD sucht nach doppelten Dateien zwischen zwei Laufwerken

Windows CMD sucht nach doppelten Dateien zwischen zwei Laufwerken

Ich habe zwei Laufwerke, sagen wir Laufwerk A (F:) und Laufwerk B (G:). Ich habe einmal den gesamten Inhalt von Laufwerk B auf Laufwerk A kopiert. Aber danach wurden Laufwerk B einige neue Dateien und Ordner hinzugefügt. Ich möchte die doppelten Dateien und Ordner von Laufwerk B löschen und nur diejenigen belassen, die auf Laufwerk A nicht vorhanden sind.

Ich habe den folgenden Befehl ausprobiert, um zu prüfen, ob Duplikate gefunden wurden, aber er funktioniert nicht wie gewünscht, da die Variable den vollständigen Pfad enthält %%a. Natürlich echo %%awird die aktuelle Ausgabe durch ein Äquivalent ersetzt, DELfalls es funktioniert.

@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

/sWenn ich den Schalter aus dem Befehl entferne, dirfunktioniert es, weil %%anur der Dateiname statt des vollständigen Pfads angezeigt wird. Es funktioniert jedoch nicht rekursiv für die Unterordner und ist daher nicht so nützlich.

Antwort1

@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

Erläuterung:

  • /A:-Dum Verzeichnisse (Ordner) aus der Liste auszuschließen, da der nachfolgende delBefehl Dateien statt Verzeichnisse löschen würde (gemäß del /?: Wenn ein Verzeichnis angegeben ist, werden alle Dateien innerhalb des Verzeichnisses gelöscht, der Ordner selbst wird jedoch nicht entfernt);
  • Ordner getrennt behandeln: Verwenden Sie einen anderen for /Fgegen dirmit /A:DSchalter, aber in diesem Fall verwenden Sie rdanstelle von delBefehl zuEinen Ordner löschen; verwenden Sie dies, rd /Sum eine komplette Ordnerstruktur zu entfernen (alle Dateien und Unterordner zusätzlich zum Ordner selbst).
  • %%~pnxadehnt sich %%avoll ausPfad + Name + Erweiterungeinschließlich eines führenden \(keine G:Datenträgerangabe);
  • del "%%~a"Vollständiger Pfad in doppelte Anführungszeichen gesetzt, um Pfade mit Leerzeichen richtig zu behandeln;
  • Ich empfehle "delims="stattdessen, "tokens=*"mögliche führende Leerzeichen in Dateinamen richtig zu behandeln (dies könnte auch ohne /SFlag erfolgen);
  • Berücksichtigen Sie zusätzliche Kommandozeilenschalter (siehe del /?und rd /?).

verwandte Informationen