2009-12-03 19:23:09 +0000 2009-12-03 19:23:09 +0000
387
387

Wie man Verzeichnisse löscht, deren Pfad/Namen für normales Löschen zu lang sind

Windows scheint beim Löschversuch ein Längenlimit für Dateinamen zu haben, obwohl es nicht verhindert, dass diese Dateien erstellt werden.

Unser Build-Prozess erstellt eine Reihe temporärer Dateien (viele davon werden aus einer WSDL erstellt), die dieses Limit überschreiten. Unser Ant-Skript ist irgendwie in der Lage, sie zu löschen, wenn es eine Bereinigung durchführt, aber manchmal muss ich das Workarea-Verzeichnis (wohin alle temporären Dateien gehen) löschen, ohne tatsächlich eine vollständige Bereinigung von ant durchzuführen.

Dies sind die gleichen Fehler diese Frage , aber die Antworten dort funktionieren nicht wirklich für mich, da ich es mit einem Verzeichnis zu tun habe, nicht mit einer Datei, und ich nicht immer weiß, welche spezifischen Dateien oder Unterverzeichnisse das Problem verursachen. Und ich versuche, jeden manuellen Vorgang (außer dem Auslösen eines einzigen Befehls) zu vermeiden, um sie tatsächlich zu löschen.

Wenn ich versuche, das Verzeichnis aus dem Explorer zu löschen, erhalte ich die Fehlermeldung

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Der Versuch, Remove-Item in der Powershell zu löschen, ergibt folgenden Fehler:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item <<<< -force -Recurse <directory>

Kennt jemand irgendwelche Tools oder einfache Möglichkeiten, diesen Löschfehler zu umgehen, ohne die Problemdateien manuell finden und verschieben/umbenennen zu müssen?

Antworten (23)

432
432
432
2009-12-03 19:48:56 +0000

Verwenden Sie den Dateimanager 7-Zip , um sie zu löschen.

Wenn Sie weiterhin Probleme haben, stellen Sie sicher, dass Sie Umschalt+Löschen im 7-Zip-Dateimanager verwenden. Andernfalls versucht Windows, sie in den Papierkorb zu verschieben (was erneut fehlschlägt).

311
311
311
2014-07-04 06:23:55 +0000

Keine der anderen (freien) Antworten hier hat bei mir funktioniert, aber ich habe eine auf einer anderen Website gefunden:

rimraf <dir>

rimraf ist ein Node.js -Paket, also müssen Sie Node.js installieren, das npm enthält. Dann können Sie:

npm install -g rimraf

Dann können Sie rimraf von der Befehlszeile aus ausführen.

Ich habe diese Lösung gefunden, weil npm selbst dieses Problem aufgrund der Art und Weise, wie es Abhängigkeiten verschachtelt, verursacht hat.

Übrigens erhält rimraf seinen Namen von dem UNIX-Befehl rm -rf, der rekursiv Dateien und Ordner löscht.

155
155
155
2016-03-03 16:45:54 +0000

Es besteht keine Notwendigkeit, ein Programm zur Lösung dieses Problems zu installieren.

Dieses Problem lässt sich leicht mit robocopy lösen, das seit dem Start von Windows Vista im Jahr 2006 vorinstalliert ist. Es besteht keine Notwendigkeit, 7zip oder ein anderes Tool von Drittanbietern zu verwenden. Powershell ist ein Overkill. Cygwin kann funktionieren, aber Sie haben es möglicherweise nicht installiert. Konzentrieren wir uns also auf rmdir /S /Q <dir>

Die Idee ist,

  1. mit robocopy zu kopieren+aktualisieren
  2. aus einem neuen leeren Ordner
  3. in den Ordner zu kopieren, den Sie löschen wollen, das Ziel.

Nach der Ausführung von robocopy wäre das Zielverzeichnis ebenfalls leer.

Diese Anweisungen sind für die Kommandozeile. Öffnen Sie einfach die Suche in Windows, geben Sie robocopy ein und drücken Sie Enter.

Nehmen wir an, das Ziel für die Löschung wäre:

C:\delete\this folder\with a very long name

Wir gehen wie folgt vor:

  1. Erstellen Sie zunächst ein leeres Verzeichnis, z.B. cmd.

  2. Kopieren+Aktualisierung aus dem leeren Verzeichnis auf das Ziel, mit der Option C:\emptyfolder

  3. Löschen Sie das leere Verzeichnis. Sie brauchen es nicht mehr.

Da sich im Quellverzeichnis (/purge) keine Dateien und Ordner befinden, werden die Dateien und Ordner unter dem Zielverzeichnis (C:\emptyfolder) einfach rekursiv gelöscht!

  • Letzter Trick: Sie können vermeiden, von Hand zu schreiben

Seien Sie vorsichtig : Die gelöschten Dateien kommen nicht in den Papierkorb! Einmal gelöscht, können die Dateien nicht wiederhergestellt werden.

(Entnommen aus “Path too long? Use Robocopy” von BVLANGEN )

PS: Mir ist klar, dass diese Antwort hier lag, weniger didaktisch. Wie löscht man in Windows eine Datei mit einem zu langen Dateinamen? [Duplikat] Benoit added:

Möglicherweise müssen Sie diesen Vorgang mehr als einmal durchführen, um alle Dateien loszuwerden.

86
86
86
2009-12-03 19:24:08 +0000

Ich glaube, ich habe einen Weg gefunden, Dinge aus cmd zu löschen. Ursprünglich habe ich es mit dem Befehl del versucht, aber das hat nicht funktioniert. Dann erinnerte ich mich an rmdir. Folgendes zu tun:

rmdir /S /Q <dir>

scheint funktioniert zu haben.

30
30
30
2014-11-25 20:22:32 +0000

Das Werkzeug, das ich benutzte, als ich dieses Problem hatte, war FastCopy . Ich wählte Alle löschen aus der Dropdown-Liste, wählte das Verzeichnis, das ich löschen wollte, und klickte auf Alle löschen.

FastCopy ist portabel (keine Installation erforderlich), und es sind 32-Bit- und 64-Bit-Versionen verfügbar.

26
26
26
2014-09-26 19:40:05 +0000

Cygwin’s rm -rf funktioniert gut auf langen Wegen!

26
26
26
2014-10-28 06:09:34 +0000

Ohne Installation zusätzlicher Software können Sie den Befehl subst verwenden, um temporär einen Alias auf ein lang benanntes Verzeichnis zu erstellen.

z.B. Wenn Sie den Ordner C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted löschen möchten, können Sie den Befehl

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

verwenden und dann X:\folder to be deleted im Windows Explorer oder in der Eingabeaufforderung einfach löschen. Um den temporären Laufwerksbuchstaben-Alias zu entfernen, verwenden Sie den Befehl

subst x: /d
22
22
22
2011-04-22 16:00:01 +0000

Gehen Sie einfach von Powershell in den Befehl, indem Sie unten laufen:

Cmd /C "rmdir /S /Q <dir>"
18
18
18
2015-06-25 14:19:53 +0000

Dentrasis Lösung ist das, was für mich am besten funktionierte, aber ich wollte die konkreten Schritte in einer Antwort auf höchster Ebene veröffentlichen.

  1. Laden Sie die neueste stabile Version von 7zip herunter und installieren Sie sie.
  2. Führen Sie den 7zip-Dateimanager ( 7zfm.exe ) aus.
  3. Navigieren Sie im 7zip-Dateimanager so, dass Sie den Namen des zu löschenden Ordners sehen können (d.h. Sie befinden sich im übergeordneten Ordner).
  4. halten Sie die Umschalttaste gedrückt.
  5. klicken Sie entweder auf Ihrer Tastatur oder in der Symbolleiste des 7zip-Dateimanagers auf die Schaltfläche “Löschen”; vergewissern Sie sich, dass Sie die Umschalttaste immer noch gedrückt halten.
  6. Klicken Sie auf die Schaltfläche “OK”; vergewissern Sie sich, dass Sie die Umschalttaste immer noch gedrückt halten.
12
12
12
2016-09-09 10:52:17 +0000

Es gibt zwei Dinge, die in den vorhandenen Antworten nicht bereits erwähnt wurden:

  1. Sie können das Pfadpräfix extended length verwenden, um auf lange Pfade zuzugreifen
  2. Mit Windows 10 können Sie die Unterstützung für lange Pfade für den allgemeinen Gebrauch aktivieren - beachten Sie jedoch, dass nicht alle Anwendungen mit langen Pfaden funktionieren, Sie sollten ältere Software testen. Nur Software mit einem entsprechenden Manifesteintrag kann davon Gebrauch machen.

Long Path Prefix

Die Windows-API hat eine spezielle Funktion, die Unicode-Pfadnamen mit einer Länge von bis zu 32k Zeichen unterstützt (wobei jedes Element bis zu 255 Zeichen lang sein kann).

Dies wird oft fälschlicherweise als UNC-Benennung bezeichnet, obwohl es nicht verwandt ist.

Das Präfix, das verwendet wird, um der API mitzuteilen, dass sie lange Unicode-Pfade verwenden soll, ist `\?Es gibt zwei Dinge, die in den vorhandenen Antworten nicht bereits erwähnt wurden:

  1. Sie können das Pfadpräfix extended length verwenden, um auf lange Pfade zuzugreifen
  2. Mit Windows 10 können Sie die Unterstützung für lange Pfade für den allgemeinen Gebrauch aktivieren - beachten Sie jedoch, dass nicht alle Anwendungen mit langen Pfaden funktionieren, Sie sollten ältere Software testen. Nur Software mit einem entsprechenden Manifesteintrag kann davon Gebrauch machen.

Long Path Prefix

Die Windows-API hat eine spezielle Funktion, die Unicode-Pfadnamen mit einer Länge von bis zu 32k Zeichen unterstützt (wobei jedes Element bis zu 255 Zeichen lang sein kann).

Dies wird oft fälschlicherweise als UNC-Benennung bezeichnet, obwohl es nicht verwandt ist.

Das Präfix, das verwendet wird, um der API mitzuteilen, dass sie lange Unicode-Pfade verwenden soll, ist wie in:

\?\D:\very long path

UNC-Namen werden normalerweise verwendet, wenn auf Pfade auf entfernten Servern in der Form \servername\path name\file name verwiesen wird. Sie können dies mit dem langen Pfadpräfix so kombinieren: \?\UNC\server\share

Beachten Sie, dass einige, schlecht geschriebene, aber leider recht häufige Anwendungen weder UNC-Dateipfade noch das lange Pfadpräfix unterstützen.

Referenz: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

Unterstützung für lange Pfade

Dies ist eine Option, die zu neueren Versionen von Windows 10 hinzugefügt wurde. Sie ist zum Zeitpunkt des Verfassens dieses Artikels nicht standardmäßig aktiviert, da sie spezielle Anwendungsunterstützung erfordert. Interessanterweise verfügt PowerShell über integrierte Unterstützung, so dass die Aktivierung dieser Option die direkte Verwendung langer Pfade in PowerShell-Skripts ermöglicht.

Sie können sie über den Gruppenrichtlinien-Editor aktivieren, wenn Sie eine Version von Windows mit dieser Unterstützung besitzen. Oder Sie können einfach die folgende Registrierungsänderung verwenden. Bitte sichern Sie wie immer den Abschnitt der Registrierung, den Sie ändern, bevor Sie etwas tun.

  1. Führen Sie regedit.exe.
  2. Bestätigen Sie die UAC-Eingabeaufforderung.
  3. Navigieren Sie zum Schlüssel: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. Erstellen oder ändern Sie den Schlüssel LongPathsEnabled.
  5. Falls er nicht vorhanden ist, klicken Sie mit der rechten Maustaste auf Policies und wählen Sie aus dem Menü Neu > Dword (32-Bit) Wert.
  6. Setzen Sie LongPathsEnabled auf 1, um ihn zu aktivieren.

Alle Anwendungen mit entsprechenden Manifesteinträgen haben jetzt Zugriff auf lange POSIX-Standardpfade. Dies sollte auch Windows-Store-Anwendungen einschließen.

Referenz: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

UPDATE 2017-04-09

@maoizm wies auf ein Problem mit dem obigen Registrierungsschlüssel hin, also habe ich etwas weiter gegraben . Es sieht so aus, als könnten Sie jetzt die Unterstützung für lange Dateinamen mit einem Systemschlüssel einstellen:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

Dies funktioniert allerdings nur für Anwendungen, die speziell dafür eingestellt sind (erfordert einen Eintrag in der manifest.xml der Anwendung).

Sie sollten auch beachten, daß Sie mit dieser Methode keine relativen Pfadnamen verwenden können.

8
8
8
2014-10-28 05:52:15 +0000

Mir gefällt die cmd-Lösung. Obwohl ich eine weitere Umgehungslösung freigeben möchte, die sogar nur im Explorer funktioniert: Versuchen Sie, die Namen der übergeordneten Ordner vor dem Löschen zu verkürzen: Kürzere Namen verkürzen den Pfad. Angenommen, Sie haben diese Baumstruktur des Ordners:

C:\

… Projekte

… .. Einige großartige Projekte im Frühjahr 2014

.. .. .. .. Einige Aktivitäten im Stadtpark an einem Freitag

… … … … Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla

… … … … … Tatsächliche Dateien mit langen Namen ebenfalls

In diesem Fall können Sie die Ordner nicht löschen, Sie können die Dateien auch nicht löschen oder umbenennen. Wenn Sie die gesamte Ordnerstruktur oder einen Teil davon entfernen möchten, können Sie die übergeordneten Ordner vorübergehend umbenennen und den Pfad verkürzen und dann den Ordner entfernen. Die Namen können nur aus Buchstaben bestehen:

C:\

… Projekte

… … x

… .. .. .. y

… .. .. .. .. z

.. .. .. .. .. Eigentliche Dateien mit langen Namen ebenfalls

In meinem Fall wollte ich einfach den ganzen Ordner mit vielen Unterordnern und Dateien entfernen. Die Namen der Ordner waren mir also egal.

7
7
7
2016-01-11 14:22:54 +0000

Die 7-Zip-Lösung funktioniert hervorragend. Eine andere Möglichkeit, wenn Sie git installiert haben, ist, eine Bash-Shell zu öffnen und zu verwenden:

rm -f

(oder rm -rf für Ordner)

4
4
4
2014-04-29 15:47:23 +0000

Ich schlage Total Commander (Shareware vor, funktioniert aber auch nach der Probezeit noch mit einem minimalen nörgeligen Startbildschirm). Auf diese Weise löse ich immer die zu langen Dateinamen Probleme.

2
2
2
2015-02-08 21:07:55 +0000

Ich habe ein einfaches Java-Programm erstellt, das zum Löschen der Dateien Robocopy verwendet. Das jar ist ein lauffähiges Programm. Für zusätzliche Ausgaben führen Sie es von der cmd-Zeile aus. https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

2
2
2
2010-11-06 16:24:27 +0000

Sie können sie auch mit der entsprechenden Kurzbezeichnung löschen. dir /x zeigt sie Ihnen an.

1
1
1
2013-12-20 06:10:00 +0000

Ich habe alle anderen Antworten ausprobiert, aber sie haben (zumindest für mich) nicht funktioniert.

Ich bin auf delinfile gestoßen und habe recht gut und ziemlich schnell gearbeitet!

Der Versuch ist auf 3 Aktionen / 15 Tage beschränkt, aber er ist brauchbar, wenn Sie nur ein paar Ordner/Dateien löschen wollten:

1
1
1
2017-10-28 00:35:26 +0000

Hier finden Sie die perfekte Antwort (für Dateien). Funktioniert in Windows 10.

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

Siehe auch: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

Nicht eine einzige alternative Antwort in 4 Fragen war für meine Bedürfnisse ausreichend. Sie sind willkommen Welt.

1
1
1
2017-01-09 12:08:22 +0000

Größere Verzeichnisse ist auch für diese Aufgabe vorgesehen.

  • Download
  • Verwendet einen rekursiven Aufruf mit RemoveDirectoryW, um bestehende Verzeichnisse zu löschen
  • Verwendet ein eigenes Datei-Repository für neu angelegte Verzeichnisse
  • Dateien können vor dem Löschen von kontaktierenden Verzeichnissen aus den Verzeichnissen verschoben werden.
  • Schnell, obwohl das Navigieren zum Anfang des Verzeichnisses ein Klick pro verschachteltem Verzeichnis ist
  • Windows XP(SP3) und höher
  • Unsignierter, nicht verwalteter Code ohne Installationsprogramm, daher mögliche Smartscreen-Warnung beim Ausführen aus einem Ersatzordner z.B. auf dem Desktop.

Weitere Infos unter CodeProject .

1
1
1
2017-06-13 07:52:13 +0000

Ich stellte mich diesem Problem in Windows 10 und fand diese einfache Lösung.

  1. Gehen Sie etwas tiefer in Ihren Ordnerbaum hinein.
  2. Ziehen Sie einen Ordner mit Hilfe der Adressleiste von irgendwo in der Mitte des Baums an den Anfang des Baums.
  3. Wie in meinem Bild ziehen Sie das rote Kästchen auf das grüne Kästchen. (in diesem Fall ist der Pfad kürzer, aber bei langen Pfaden funktioniert es auch)
  4. Dann wird Ihr Pfad kürzer, und Sie löschen wie gewohnt mit der Löschtaste.

0
0
0
2015-06-25 16:47:36 +0000

Über Powershell habe ich schließlich herausgefunden, wie man das macht. Hier sind die Anweisungen, die ich befolgt habe, um dies unter Windows 7 zum Laufen zu bringen:

  1. Erstellen Sie einen neuen Ordner namens NTFSSecurity im Ordner C:\Users\XXXX\Documents\WindowsPowerShell\Modules\NTFSSecurity, wobei XXXX Ihr Windows-Benutzername ist. Beispiel: Wenn mein Benutzername “aspnyc” wäre, wäre der neue Ordner C:\Benutzer\aspnyc\Dokumente\WindowsPowerShell\Module\NTFSSecurity .

  2. Laden Sie das Paket File System Security PowerShell Module package herunter - es sollte als einfache ZIP-Datei verfügbar sein.

  3. Öffnen Sie eine Powershell-Konsole, führen Sie Get-Module -ListAvailable aus und stellen Sie sicher, dass NTFSSecurity irgendwo in der Liste der registrierten Module erscheint.

  4. Führen Sie in der Powershell-Konsole Import-Module NTFSSecurity aus.

    1. führen Sie in der Powershell-Konsole Remove-Item2 “YYYYY” -Recurse aus, wobei YYYYY der Windows-Pfad zu dem Ordner ist, den Sie rekursiv löschen möchten (z.B. C:\Potatoes\Badgers\FolderToDelete ).
0
0
0
2015-10-09 16:08:22 +0000

Ich habe schließlich herausgefunden, wie ich das mit Powershell unter Windows 10 machen kann, wo die einzelnen Dateinamen zu lang waren. Hier sind die Schritte, die ich befolgt habe, um dies unter Windows 10 zum Laufen zu bringen:

  1. Laden Sie das Paket File System Security PowerShell Module package herunter - es sollte als einfache ZIP-Datei verfügbar sein.
  2. Entpacken Sie die ZIP-Datei als Ordner NTFSSecurity im Verzeichnis C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules.
  3. Öffnen Sie eine Powershell-Konsole mit der administrativen Ebene (alias Admin-Modus) und führen Sie Get-Module -ListAvailable aus und stellen Sie sicher, dass NTFSSecurity irgendwo in der Liste der registrierten Module erscheint.
  4. Führen Sie Set-ExecutionPolicy Unrestricted aus, um den signierten Ausführungsmodus zu umgehen. Sie müssen diese Aktion mit einem Y(es) bestätigen
  5. schließlich cd in den Ordner, den Sie löschen möchten.
  6. führen Sie in der Powershell-Konsole Import-Modul NTFSSecurity aus.
  7. Führen Sie in der Powershell-Konsole Remove-Item2 “YYYY” -Recurse aus, wobei YYYYY der relative oder absolute Windows-Pfad zu dem Ordner ist, den Sie rekursiv löschen möchten (z.B. C:\Potatoes\Badgers\FolderToDelete ).
  8. Prüfen Sie, ob es funktioniert hat.
  9. Schließlich mit Set-ExecutionPolicy Restricted in den signierten Ausführungsmodus zurücksetzen. Sie müssen diese Aktion mit Y(es) bestätigen.
0
0
0
2019-07-16 21:25:40 +0000

Navigieren Sie zu dem Verzeichnis in WinRAR, wählen Sie die Datei, drücken Sie F2, benennen Sie die Datei in einen kürzeren Namen um. Dann können Sie die Datei wie gewohnt löschen.

Quelle: https://www.youtube.com/watch?v=qQTyTprFAOg

0
0
0
2017-07-05 10:44:55 +0000

Wenn Sie die Bash unter Ubuntu unter Windows installiert haben, können Sie in einer regulären Eingabeaufforderung zum übergeordneten Verzeichnis wechseln und dann Folgendes eingeben: &00002 bash -c "rm -rf dirname_here"

Was die Bash startet, das Verzeichnis rekursiv aus Linux löscht, wo es keine Dateinamensbeschränkungen gibt, und dann zurück zur regulären Eingabeaufforderung geht.