So finden Sie Dateien mit dem gleichen Namen und entfernen Sie alle außer der neuesten in Windows von der Befehlszeile

497
liamZ

Ich möchte nur die neueste Version der Dateien mit demselben Namen in einem Ordner und in Unterordnern aufbewahren. Mit anderen Worten, ich möchte doppelte Dateien in einem Ordner und in Unterordnern entfernen. Dabei wird nur berücksichtigt, dass zwei Dateien Duplikate sind, wenn sie denselben Namen (und die gleiche Erweiterung) haben und nur diejenige beibehalten, die das neueste Änderungsdatum hat.

Ich weiß, dass ich es manuell mit Programmen wie CCleaner oder SearchMyFiles von Nirsoft tun kann, aber sie haben nicht die Möglichkeit, alle außer dem neuesten auszuwählen, um sie zu löschen. Sie müssen dies manuell tun.

Gibt es also ein Befehlszeilentool oder cmd bat oder powershell, um diese Aufgabe auszuführen?

0
Da Sie nicht mehr als eine Datei mit demselben Namen in einem Ordner haben können, meinen Sie Dateien mit demselben Namen in Unterordnern eines Ordners? Michael Harvey vor 6 Jahren 2
Kennen Sie bereits den gleichen Namen, den Sie löschen möchten? Michael Harvey vor 6 Jahren 0
Haben die "gleichnamigen" Dateien unterschiedliche Dateierweiterungen? glenn jackman vor 6 Jahren 0
Ja, sorry, ich meine in dem Ordner und den Unterordnern, und ich meine den gleichen Namen und die Erweiterung. Ich möchte doppelte Dateien entfernen, wobei nur berücksichtigt wird, dass zwei Dateien Duplikate sind, wenn sie den gleichen Namen (und die gleiche Erweiterung) haben und nur die neuesten Dateien behalten. liamZ vor 6 Jahren 0
Ich schreibe eine Datei für dich, da ich diese auch brauche. Mark Deven vor 6 Jahren 0

1 Antwort auf die Frage

0
Mark Deven

Ich habe hier ein Programm für Sie erstellt: https://github.com/ITCMD/Remove-Duplicates

DelDupe /? Ausgabe:

Deletes duplicate Files except the latest edited.  DelDupe "Directory" "Filename" /F /C Character  Directory: Directory to search for duplicate names. Use C:\Users\IT Command\Documents\Batch Codes\Keep Recent Mod Date for current dir. Filename: Duplicated Filename to search for /F Do not prompt removal /C Provide your own system character: The default character it uses to seperate files is ~. You don't need to know what this means, but if you have the ~ character in your filename then supply your own. Character: The Character you want to use instead of ~  Example: DelDupe "C:\Users\IT Command\Documents\Batch Codes\Keep Recent Mod Date" "Picture.png"  This example will surch all subdirectories in your current folder for a file called "Picture.png" and will delete all copies except for the most recently modified one.  Created by Lucas Elliott www.itcommand.tech 

Beachten Sie, dass dies keine Website ist, auf der die Benutzer aufgefordert werden, vollständige Skripts für Sie zu erstellen. Die Leute werden sauer, wenn Sie nicht zeigen, dass Sie es versucht haben (ich weiß, dass Sie wahrscheinlich nicht wissen, wo Sie anfangen sollen). Es ist in Ordnung, eine Frage zu stellen, die Sie meiner Meinung nach getan haben, aber erwarten Sie nicht immer eine vollständige Antwort. Ich brauchte das sowieso nur für mich.

Hallo, vielen Dank für deine Antwort und das Skript. Der Dateiname ist jedoch kein Parameter in meiner Frage. Ich möchte nur die letzte Version jeder Datei im Verzeichnisbaum behalten. Ich kann es jetzt nicht testen, aber denken Sie so etwas wie: `forfiles / p Ordner / s / c" cmd / c DelDupe Ordner @Pfad "` wird funktionieren? liamZ vor 6 Jahren 0
Ich dachte jedenfalls, dass dies eine gewöhnliche Aufgabe wäre, und es würde ein Befehlszeilentool (exe) geben, aber diejenigen, die ich gefunden habe, wie FindDupe oder Dupemerge, sind für exakte Duplikate und entfernen oder entfernen sie. Über die GUI-Tools wie CCleaner und SearchMyFiles habe ich endlich eines gefunden, das automatisch nur die letzte Version für alle Dateien mit demselben Namen enthält: CloneSpy. Aber ich mache es lieber von der Kommandozeile aus. Nochmals vielen Dank für Ihren Code und ich werde sehen, wie ich es damit mache. liamZ vor 6 Jahren 0
froh das zu hören! Mark Deven vor 6 Jahren 0
Hi, ich teste DelDupe und ich musste Zeile 56 ändern: if / i nicht definiert force. Leider muss die zuletzt geänderte Datei nicht gespeichert werden. Es behält eine der anderen Dateien. liamZ vor 6 Jahren 0
Hmmm, ich schau mir das mal an. Mark Deven vor 6 Jahren 0
Wenn es innerhalb einer Minute geändert wurde, kann es nicht sagen Mark Deven vor 6 Jahren 0
Ich habe 6 Dateien mit demselben Namen in Unterordnern mit diesen Änderungsdaten: (20120401-122640) (20120120 134232) (20111215 070716) (20120910 064302) (20130723 112316) (20130720 061758) und behält die (20120910 064302) liamZ vor 6 Jahren 0
Ich habe herausgefunden, warum Deldupe für mich nicht funktioniert: Mein Formatdatum ist JJJJ-MM-TT liamZ vor 6 Jahren 0
Hmm okay. Ich muss herausfinden, wie man mit verschiedenen Terminen umgeht. Danke, dass du es mir gesagt hast! Mark Deven vor 6 Jahren 0
OK, ich habe den Code bereits geändert, um mit meinem Format zu arbeiten. Eine andere Sache, die nicht funktionierte, war, dass die Dateien immer gelöscht werden, wenn Sie N antworten. Ich denke, Sie müssen Zeile 60 in `if! Errorlevel! == 2 goto cleanup` ändern. Und schließlich fand ich, dass `DelDupe" rootdir "" name "` ausgeführt wird, wenn es ein Unterverzeichnis "rootdir \ name \" mit dem gleichen Namen gibt, den Sie deldupe angeben. Es möchte alle darin enthaltenen Dateien entfernen und sucht nicht nach andere Dateien in den anderen Unterverzeichnissen. liamZ vor 6 Jahren 0
Oh, weh tut mir leid !!!! Das ist eine große Sache. Mark Deven vor 6 Jahren 0
Hallo, mit dem Tool where.exe anstelle von dir in Zeile 17 `where / r"% PathN% ""% FileName% ">"% TEMP% \% ran% .ITCMD.log "` löste den zweiten, wenn ich ' Ich bin nicht falsch. Eine andere Sache, die ich gefunden habe, ist, dass, wenn der Dateiname mit _ beginnt, alle Dateien gelöscht werden, auch die neuesten. liamZ vor 6 Jahren 0
Yikes Nun, ich werde mich jetzt zurückziehen: D Mark Deven vor 6 Jahren 0