Dateien und Verzeichnisse mit langen Namen löschen (in PowerShell)

    Warnung im Explorer über zu lange DateinamenObwohl das 8+3-Limit für Datei­namen schon lange nicht mehr gilt, kann das Löschen aber immer noch an zu lan­gen Pfad­namen scheitern. In Power­Shell lässt sich das Problem mit einer spezi­fischen Syntax oder einem eigenen Cmdlet umgehen. In Windows 10 beseitigt ein GPO dieses Limit auch im Explorer.

    Im Vergleich zu den Beschränkungen des FAT-Dateisystems nehmen sich die 260 Zeichen, die Win32 als maximale Pfadlänge definiert, sehr großzügig aus. Wenn aber zu tief ver­schachtelten Ver­zeichnissen noch lange Datei­namen kommen, dann stößt man aber auch hier schnell an Grenzen. Ein typischer Fall sind temporäre Installations­dateien von Windows 10, die sich gegen das Löschen sperren.

    Bordmittel scheitern unter normalen Bedingungen

    So beschwert sich der Explorer beim Löschen von solchen Dateien zuerst darüber, dass die Namen zu lang für den Papierkorb seien, und verweigert anschließend das Entfernen mit einem erneuten Verweis auf die Länge der Dateinamen. Auf der Kommandozeile erhält man je nach Tool mehr oder weniger irreführende Meldungen, darunter auch jene, dass die betreffenden Dateien nicht gefunden wurden.

    Der Explorer verweigert standardmäßig das Löschen von Dateien, wenn die Pfadlänge 260 Zeichen übersteigt.

    In diversen Online-Foren findet man eine ganze Reihe von Tipps, wie man solche Dateien trotzdem beseitigen könne. Sie reichen vom robocopy eines leeren Verzeichnisses auf jenes mit den langen Namen (mit dem Schalter /purge oder /mir) bis zum Einsatz von 7-zip. Die Ergebnisse entsprechen meist nicht den Erwartungen.

    Verwendung der 8+3-Namen

    Ein weiteres gerne kolportiertes Verfahren besteht darin, die 8.3-Kurzform der langen Dateinamen mit

    dir /x

    auszulesen und die Dateien damit zu löschen. Allerdings gibt es die 8.3-Namen nicht auf allen Volumes, außerdem wird dieses Vorgehen zu umständlich, wenn man eine größere Zahl an Verzeich­nissen oder Dateien löschen will.

    Remove-Item2

    Wenn man für diese Aufgabe zu PowerShell greift, dann bieten sich gleich mehrere Optionen. So enthält das Modul NTFSSecurity, mit sich NTFS-Berechtigungen verwalten lassen, ein Cmdlet namens Remove-Item2. Dieses beseitigt Dateien und Verzeichnisse ohne Rücksicht auf die Pfadlänge.

    Wo Remove-Item scheitert, entfernt Remove-Item2 die Dateien mit langen Namen klaglos.

    Voraussetzung für die Verwendung des Cmdlets ist die Installation des NTFS-Moduls, die über das Package-Management von PowerShell erfolgen kann:

    Install-Module NTFSSecurity

    Der Vorteil dieser Methode besteht darin, dass Remove-Item2 die gleiche Syntax verwendet wie Remove-Item und dass man es auch unter Windows 7 oder 8.1 verwenden kann.

    Syntax für DOS-Device-Path

    Das Gleiche gilt für eine weitere Variante, bei der man die Objekte mit einem langen Pfadnamen über spezielle symbolische Links anspricht. Dazu verwendet man die so genannte DOS-Device-Path-Syntax, bei der man den Pfaden (UNC oder solchen mit Laufwerks­buchstaben ein \\?\ voranstellt:

    Remove-Item '\\?\E:\$WINDOWS.~TMP\amd64_Microsoft-Windows-EditionSpecific-Professional-Package~~AMD64~~10.0.17666.1000' -Recurse -Force -Verbose

    Wie man hier sieht, muss man zu diesem Zweck einen absoluten Pfad inklusive Laufwerks­buchstaben verwenden. Im alten Kommando­interpreter bleibt der entsprechende Aufruf des del-Befehls aber folgenlos:

    Unter cmd.exe führt der Löschbefehl zu keinem Ergebnis, auch wenn man dem Pfad ein \\?\ voranstellt.

    Lange Pfade über Gruppenrichtlinien

    Seit Windows 10 1607 lässt die Win32-Prüfung auf MAX_PATH mit Hilfe eines GPO deaktivieren. Standardmäßig sind die langen Pfade nicht freigeschaltet, weil nicht alle Anwendungen darauf vorbereitet sind und möglicher­weise Probleme mit der Kompatibilität auftreten könnten.

    Einige der Bordmittel kommen damit gut zurecht, darunter PowerShell und der Explorer. Auf der Kommandozeile kann man daher dann auf das vorangestellte '\\?\' verzichten, allerdings nicht bei cmd.exe.

    Lange Win32-Pfade über Gruppenrichtlinien aktivieren

    Die zuständige Einstellung findet sich unter Computerkonfiguration => Richtlinien => Administrative Vorlagen => Alle Einstellungen und heißt Lange Win32-Pfade aktivieren.

    Wenn man nach dem Aufruf von gpupdate eine neue PowerShell-Sitzung startet, dann kann man dort Dateien mit langen Dateinamen nun einfach mit dem integrierten Remove-Item entfernen.

    7 Kommentare

    Benjamin sagt:
    21. Juni 2018 - 20:48

    Alternative kann zum Beispiel der "Far Manager" genutzt werden um diese Dateien / Verzeichnisse zu löschen oder zu verschieben. Am Bestem direkt auf den Fileserver kopieren und in so einem Fall Problem schnell und ohne Powershell lösen ;-)

    MusMus sagt:
    28. Juli 2019 - 8:52

    "Voraussetzung für die Verwendung des Cmdlets ist die Installation des NTFS-Moduls---"
    Wo denn, bitteschön? Auf dem Entwicklungsrechner, dem Anwendungsrechner, auf beiden, oder sonstwo? Etwas mehr Präzision, gerade bei anscheinend geläufigen Sachverhalten, wäre sehr nützlich.

    Bild von Wolfgang Sommergut
    28. Juli 2019 - 12:20

    Dort wo man es nutzen möchte. Wie man es installiert, steht in dem oben verlinkten Beitrag.

    Marx Renaldo sagt:
    12. September 2019 - 0:04

    Also Ihre Erklärung Herr Sommergut ist wohl nicht gerade für normale PC Benutzer gedacht.
    Eine einfachere Lösung oder ein kleines Program wären da eher angebracht.

    Muvimaker sagt:
    17. April 2020 - 23:29

    @Max Renaldo
    Vielleicht ist mein Lösungsansatz nicht ganz im Sinne des Artikels (es geht immerhin beim Thema um die Löschung von Dateien und Verzeichnissen), doch ich löse diese Probleme immer so:

    Dazu muss ich kurz ausholen. Bei der Sicherung von Mobiltelefonen kommt es - bedingt durch das Betriebssystem, welches ja die Einschränkungen der Pfadlänge des Dateisystems nicht kennt - immer wieder zu überlangen Verzeichnis-/Dateinamen/, welche zwar im Windows-Dateisystem gespeichert, jedoch nicht mehr kopiert oder gelöscht werden können. Ähnliches passiert beim Export von Dateien aus dem Benutzerverzeichnis (zB die PST-Datei von Outlook). Die Dateien/Verzeichnisse werden im Explorer zwar angezeigt, jegliche Dateioperation endet allerdings mit einer Fehlermeldung mit Bezug auf die Überlänge des Pfades.

    Und hier beginnt mein Ansatz: Um dies zu beheben, begebe ich mich in die unterste Ebene der Verzeichnisstruktur, benenne einfach jeden Zweig des Pfades auf die kürzestes Länge um, gehe zur nächst höheren Ebene, benenne wieder um, usw. Danach versuche ich entweder (je nach Bedarf) zu kopieren bzw zu löschen. Stimmt die Pfadlänge, funktioniert der Vorgang, ist sie noch immer zu hoch, verfahre ich weiter - so lange bis der Pfad nicht mehr überlang ist.
    Mit dieser Methode konnte ich noch immer solche hartnäckigen Verzeichnisse/Dateien löschen bzw deren Inhalt kopieren.

    Wenn ich größere Bestände oder ganze Festplatten dateiweise kopieren muss, verwende ich vorher das Tool "Path Scanner" (früher von Parhelia Tools, akutell wird es auf der Homepage nicht mehr geführt), um festzustellen, ob die Pfadlängen korrekt sind. Das geht sehr schnell und spart insofern Ärger, als bei stundenlangen Kopiervorgängen (nach Murphys Gesetzen) genau dann der Rechner stoppt und einen überlangen Pfad meldet, wenn man den Computer unbeaufsichtigt lässt und hofft, dass die Sache nach einigen Stunden erledigt ist.

    "Long Filename Finder" von DCSoft verwendet einen ähnlichen Ansatz und bietet nach Anzeige der überlangen Dateinamen sogar an, diese mit Tastendruck/Mausklick umzubenennen.

    Die Option von Windows 10, überlange Dateinamen via Gruppenrichtlinen zuzulassen, scheint auf den ersten Blick die einfachste Lösung zu sein, doch muss - wie im Artikel richtig angeführt - auch die Anwendung mitspielen.

    Pauschal diese Überlänge zuzulassen kann also auch kontraproduktiv sein.

    Wolfgang Lienert sagt:
    12. Juni 2020 - 9:56

    Die vorgetragenen Lösungen sind alle zu kompliziert. Einfacher geht es mit dem MS-DOS-Befehl Befehl robocopy mit Verwendung der Option /mir:

    Beispiel:
    robocopy c:\leer c:\ABC /mir

    Hinweis:
    leer ist ein leeres Verzeichnis und ist vorher anzulegen
    ABC ist das Verzeichnis mit dem zu langen Namen
    Die Option /mir bewirkt das Spiegeln des leeren Verzeichnisses (leer) in das mit langem Namen (ABC) mit der Konsequenz, dass dieses auch leer wird.

    Anmerkung:
    Abschließend kann man das Verzeichnis ABC klassisch problemlos löschen.

    Dipl.-Informat.
    Wolfgang Lienert

    SeniorAdmin sagt:
    8. Juli 2020 - 9:54

    Super Lösung! Funktioniert 1A!