Tags: Dateisystem, Gruppenrichtlinien, PowerShell
Obwohl das 8+3-Limit für Dateinamen schon lange nicht mehr gilt, kann das Löschen aber immer noch an zu langen Pfadnamen scheitern. In PowerShell lässt sich das Problem mit einer spezifischen 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 verschachtelten Verzeichnissen noch lange Dateinamen kommen, dann stößt man aber auch hier schnell an Grenzen. Ein typischer Fall sind temporäre Installationsdateien 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.
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 Verzeichnissen 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.
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 Laufwerksbuchstaben 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 Laufwerksbuchstaben verwenden. Im alten Kommandointerpreter bleibt der entsprechende Aufruf des del-Befehls aber folgenlos:
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öglicherweise 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.
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.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links
12 Kommentare
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 ;-)
"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.
Dort wo man es nutzen möchte. Wie man es installiert, steht in dem oben verlinkten Beitrag.
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.
@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.
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
Super Lösung! Funktioniert 1A!
Interessante Ausführung. Habe das Problem das ich 3 PDF Dateien auf dem Desktop mit mehr als 260 Zeichen habe. Was gebe ich da bei robocopy zum löschen an?
Super, dankeschön für den Robocopy-Trick; hat mir vermutlich eine Menge Zeit und Mühsal erspart, die "more sophisticated"-Tricks auszuprobieren.
Gruß von einem Berufskollegen :-)
Wunderbar! DIESER Tipp hat mir gerade den Tag gerettet! :)
Mit CMD: ROBOCOPY/MIR habe zwar die Datei mit langen Namen entfernt, aber der Ordner in den sie war (hat auch überlangen Namen) last sich nicht löschen. WIN 7 pro, 64 bit
LG Willi
Also bei mir hat es mit 7-zip schnell und anstandslos geklappt. Ich habe den übergeordneten Ordner gezippt und das Häkchen "nach komprimieren löschen" angeklickt.