Angenommen, ich kopiere und füge Dateien aus Ordner A ein. Dazu gehören:
Ordner A:
file1.cfg
file2.txt
file3.esp
file4.bsa
in Ordner B, der nach dem Update Folgendes enthält:
Ordner B:
apples.mp3
file1.cfg *
file2.txt *
file3.esp *
file4.bsa *
turtles.jpg
Gibt es eine Möglichkeit, alle Dateien aus Ordner A zu löschen, die sich in Ordner B befinden (gekennzeichnet mit einem *)? Neben der manuellen Auswahl und dem Löschen jeder Datei oder der Strg-Z-Taste direkt nach dem Kopieren-Einfügen
Ich würde entweder eine Windows-Methode oder eine Software bevorzugen, die dies tun könnte
Vielen Dank!
windows
windows-explorer
DarkFire13
quelle
quelle
Antworten:
Es gibt freie Software namens WinMerge . Mit dieser Software können Sie Duplikate abgleichen. Verwenden Sie zunächst
File
→Open
und wählen Sie beide Verzeichnisse aus. Der Ordner mit den Dateien, die Sie behalten möchten, befindet sich links und die nicht rechts. Dann gehen Sie zuView
, und AbwahlShow Different Items
,Show Left Unique Items
undShow Right Unique Items
. Dadurch verbleiben nur die identischen Dateien in der Liste. Wählen Sie anschließendEdit
→Select All
, klicken Sie mit der rechten Maustaste auf eine beliebige Datei und klicken Sie aufDelete
→Right
. Dadurch werden die Duplikate aus dem Ordner auf der rechten Seite gelöscht.quelle
Dies kann mit dem Befehl über die Befehlszeile erfolgen
forfiles
Nehmen wir an, Sie haben Ordner A
c:\temp\Folder A
und Ordner Bc:\temp\Folder B
Der Befehl wäre dann:
Anschließend werden in Ordner B alle Dateien entfernt, die in Ordner A vorhanden sind. Beachten Sie, dass in Ordner B Dateien mit demselben Namen, aber nicht demselben Inhalt weiterhin gelöscht werden.
Es ist möglich, dies zu erweitern, um auch mit Ordnern in Unterordnern zu arbeiten, aber aus Angst, dass dies unnötig kompliziert wird, habe ich mich dagegen entschieden, es zu veröffentlichen. Hierfür sind die Optionen / s und @relpath erforderlich (und weitere Tests von xD).
quelle
Sie können dieses PowerShell-Skript verwenden:
Hoffentlich ist es ziemlich selbsterklärend. Es überprüft jedes Element in Ordner B, ob es in Ordner A ein Element mit demselben Namen gibt, und entfernt in diesem Fall das Element in Ordner A. Beachten Sie, dass das Finale
\
in den Ordnerpfaden wichtig ist.Einzeilige Version:
Wenn es Ihnen egal ist, ob in der Konsole eine Flut roter Fehler angezeigt wird, können Sie die entfernen
-EA 'SilentlyContinue'
.Speichern Sie es als
.ps1
Datei, zdedupe.ps1
. Bevor Sie PowerShell-Skripts ausführen können, müssen Sie deren Ausführung aktivieren:Dann können Sie es mit aufrufen,
.\dedupe.ps1
wenn Sie sich in dem Ordner befinden, der es enthält.quelle
rsync
rsync
ist ein Programm zum Synchronisieren von Verzeichnissen. Aus den vielen (wirklich viele) Optionen , die Sie haben , gibt es die selbsterklärend--ignore-non-existing
,--remove-source-files
und--recursive
.Du kannst tun
Nehmen wir an, Sie haben die Dateien im Verzeichnis A (4) und B (4 + 2).
quelle
Die Antwort von LPChip ist die bessere.
Aber weil ich angefangen habe, Python zu lernen, dachte ich: "Mist, warum schreibst du nicht ein Python-Skript als Antwort auf diese Frage?"
Installieren Sie Python und Send2Trash
Sie müssen Python installieren, bevor Sie das Skript über die Befehlszeile ausführen können.
Installieren Sie dann Send2Trash, damit die gelöschten Dateien nicht unwiederbringlich gelöscht werden, sondern im Papierkorb des Betriebssystems landen:
Skript erstellen
Erstellen Sie eine neue Datei mit beispielsweise dem Namen
DeleteDuplicateInFolderA.py
Kopieren Sie das folgende Skript in die Datei.
Verwendung
Trockenlaufmodus, in dem angezeigt wird, welche Dateien gelöscht würden, ohne dass tatsächlich Dateien gelöscht würden:
Dateilöschmodus, der tatsächlich Dateien löscht, also seien Sie vorsichtig:
Ausgabe des Trockenlaufmodus
Ausgabe des Dateilöschmodus
Gerätetest
Wenn Sie die obige Anwendung testen möchten, erstellen Sie eine Datei mit dem Namen
DeleteDuplicateInFolderATest.py
und fügen Sie diese Unittests ein:quelle
Bash benutzen
Sicher können Sie sicherer sein, indem Sie prüfen, ob die Datei vorhanden ist oder ob der Dateiname sicher ist. Angenommen, Sie möchten dies nur erledigen und haben keine lächerlich benannten Dateien darin
folderB
- dies ist eine schnelle und schmutzige Möglichkeit, dies zu erledigen. (und Sie können den mit git gelieferten Bash-Emulator verwenden , wenn Sie Win10 + bash nicht ausführen)quelle
Jedes NC-ähnliche Programm wie Total Commander verfügt über einen Verzeichnisunterschiedsbefehl, mit dem Dateien auf beiden Registerkarten ausgewählt werden, die sich von den anderen Registerkarten unterscheiden. Rufen Sie diesen Befehl auf,
tab
um das größere Verzeichnis (B) zu öffnen, Auswahl umzukehren*
und zu löschen. Dies hat den Vorteil, dass Dateien nicht gelöscht werden, die sich (irgendwie) geändert haben und nicht gleich sind, obwohl sie im Namen übereinstimmen. Sie können denselben Befehl directory diff verwenden, um diese nach dem Löschen zu suchen.Ich schätze, ich stecke in den Neunzigern fest ... aber ich habe seitdem nichts Eleganteres mehr gesehen :-) Bisher ist dies die einzige Antwort, die nur 5 Tastatureingaben und überhaupt kein Scripting / keine Befehlszeile erfordert.
quelle
Windows-Methode
Wenn Sie immer Dateien von einem Speicherort an einen anderen kopieren und anschließend sicherstellen müssen, dass die erfolgreich kopierten Dateien auch vom ursprünglichen Quellspeicherort gelöscht werden, finden Sie nachfolgend eine Batch-Skript-Lösung, mit der Sie die gesamte Aufgabe mit nur einem automatisieren können Klicken Sie einfach auf jeden Lauf.
Stellen Sie sicher, dass Sie die
SourceDir
und dieDestDir
Variablen entsprechend Ihren Anforderungen einstellen .Darüber hinaus können Sie im folgenden Teil des Skripts
("%SourceDir%\*.*") DO
den*.*
Wert einfach so ändern , dass er für Dateinamen (File A.txt
) oder Dateierweiterungen (*.wav
) nach Bedarf expliziter wird .Weitere Ressourcen
quelle