goodbytes
Goto Top

Batch oder VBS - Doppelte Dateinamen in einem Verzeichnis finden und löschen oder verschieben

Hallo,
ich habe ein dringendes Problem.

Durch einen Softwarefehler wurden mir in einem Verzeichnis sehr viele doppelte Dateinamen erzeugt (ca. 15.000 Dateien).
Von diesen Dateien sollen die Dubletten gelöscht werden.
Ideal wäre wahrscheinlich der bitweise Vergleich.
Ansonsten sind generell die ersten 16 Stellen des Dateinamens identisch, danach unterscheiden sie sich (Zeitstempel der Erzeugung).
Ich muss möglichst schnell die Dupletten entfernen, damit ich die restlichen Dateien weiterverarbeiten kann!

Vielen dank im Voraus!

Gruß
Torsten

Content-Key: 240710

Url: https://administrator.de/contentid/240710

Printed on: April 24, 2024 at 14:04 o'clock

Member: emeriks
emeriks Jun 12, 2014 at 09:46:49 (UTC)
Goto Top
Hi,
was sind denn hier "Dupletten"? Du willst immer nur eine Datei von jeder Gruppe mit gleichen ersten 16 Stellen erhalten? Und welche? Die älteste, die jüngste, oder was?
E.
Member: goodbytes
goodbytes Jun 12, 2014 at 09:49:26 (UTC)
Goto Top
Ja genau. Die Dateien sind wirklich identisch und beim Dateiname die ersten 16 Stellen immer gleich. Welche ich nehme ist eigentlich egal. Am besten einfach die erste erstellte Datei.

Gruß
Torsten
Member: Knorkator
Knorkator Jun 12, 2014 updated at 10:34:13 (UTC)
Goto Top
Hilft Dir das Erstellungsdatum der Dateien vielleicht auch weiter?

Schau mal hier:
http://blog.waltritscher.com/index.php/2009/08/30/powershell-find-files ...

Poste doch zusätzlich bitte einen Originalen Dateinamen sowie einen von einer Dublette.
Evtl. sollte man nicht die ersten 16 Zeichen filtern sondern die letzten.
Member: colinardo
Solution colinardo Jun 12, 2014 updated at 13:30:48 (UTC)
Goto Top
Hi Thorsten,
wenn Powershell nichts ausmacht, probiers mal hiermit:
$folder = "C:\test"  
$files = dir $folder -Recurse |  ?{!$PSIsContainer -and $_.BaseName.Length -ge 16}
$dupes = @()
foreach($file in $files){
    $check = dir "$($file.Directory)\$($file.BaseName.Substring(0,16))*" -ErrorAction SilentlyContinue | sort -Property LastWriteTime  
    if ($check.Count -gt 1){
        foreach($f in $check[1..($check.Length)]){
            if ($dupes -notcontains $f.FullName){
                $dupes += $f.FullName
            }
        }
    }
}
$dupes | %{write-host "Lösche Dublette: '$_'" -ForegroundColor Green; remove-item $_ -Force}  
Bitte bei dir an einem Testordner vorher testen.

Grüße Uwe
Member: Tommy70
Tommy70 Jun 12, 2014 at 11:11:44 (UTC)
Goto Top
Hallo,

dafür gibt es auch schon fertige Freeware Tools wie zum Beispiel DoubleKiller

Tom
Member: goodbytes
goodbytes Jun 12, 2014 at 13:59:38 (UTC)
Goto Top
Hallo Uwe,
funktioniert perfekt, vielen Dank !!! face-smile

@Tommy70
Vielen Dank aber das Toll bringt mich da leider nicht weiter. Es handelt sich im Ergebnis um knapp 200 übrig gebliebene Dateien, aus denen sind durch den Fehler rund 15.000 Dateien entstanden. Ich hätte somit knapp 200 Filter "DieErsten16Stellen*" anlegen müssen... face-sad

Also, vielen Dank an Alle !!! face-smile

Gruß
Torsten