Frage So löschen Sie Verzeichnisse mit Pfad / Namen, die für das normale Löschen zu lang sind


Windows scheint eine maximale Länge für Dateinamen zu haben, wenn es versucht zu löschen, obwohl es nicht verhindert, dass diese Dateien erstellt werden.

Unser Build-Prozess erstellt eine Reihe von temporären Dateien (viele Builds einer WSDL), die dieses Limit nicht einhalten. Unser Ameisenskript ist irgendwie in der Lage, sie zu löschen, wenn man eine Säuberung durchführt, aber manchmal muss ich das Arbeitsbereichsverzeichnis löschen (wo alle temporären Dateien liegen), ohne tatsächlich eine vollständige Säuberung von Ameisen zu machen.

Das sind die gleichen Fehler diese Frage, aber die Antworten dort funktionieren nicht wirklich für mich, da es sich um ein Verzeichnis und nicht um eine Datei handelt und ich nicht immer weiß, welche spezifischen Dateien oder Unterverzeichnisse das Problem verursachen. Und ich versuche, jeden manuellen Prozess zu vermeiden (außer das Auslösen eines einzelnen Befehls), um sie tatsächlich zu löschen.

Wenn ich versuche, das Verzeichnis aus dem Explorer zu löschen, erhalte ich den Fehler

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

Versuchen Remove-Item in Powershell gibt den 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 Werkzeuge oder einfache Möglichkeiten, um diesen Löschfehler zu umgehen, ohne die Problemdateien manuell finden und verschieben / umbenennen zu müssen?


349
2017-12-03 19:23


Ursprung


Ich habe die Lösung kurz vor der Veröffentlichung dieser Frage gefunden, aber da andere möglicherweise darauf stoßen, habe ich beschlossen, sie so zu veröffentlichen, dass sie die Lösung finden, die ich gefunden habe. - Herms
Oh, ich weiß, aber wenn ich solche Dinge mache, lasse ich die Frage für eine Weile "unbeantwortet", um zu sehen, ob jemand anders eine bessere Lösung hat. - Herms
Durch Weit die einfachste Lösung: youtube.com/watch?v=qQTyTprFAOg - TaW
verwenden Ubuntu oder irgend ein anderer Linux Bootable CD wir können unseren Computer booten Ubuntu oder irgendein anderes OS für temporary.then können wir den Ordner auswählen und wir können ihn leicht löschen. - kelum priyadarshane
Diese ältere Frage hat auch einige interessante Antworten: superuser.com/questions/45697/ ... - AdamV


Antworten:


Benutze die 7-Zip Dateimanager, um sie zu löschen. Benutzen VerschiebungDEL den 7zip File Manager einbinden (sonst versucht Windows, in den Papierkorb zu wechseln, was erneut fehlschlägt).


392
2017-12-03 19:48



Danke - das hat einen Verzeichnisbaum losgeworden, der ein wenig rekursiv wurde und zu tief war, um del / rmdir / rm / explorer zu entfernen - Martin Beckett
funktionierte großartig mit shift + Del - 7zip konnte keine lang-pathed Dateien in den Papierkorb schicken .... - cori
+1 7 Zip. Sie müssen zu dem Ordner navigieren und DANN verwenden shift + Del wie @cori sagte. Wenn Sie die Option auswählen Delete Option aus dem Kontextmenü, wird es dort fehlschlagen. shift + Del es! - Urda
7zip hat nicht für win7 64 funktioniert, also Linux. - Erik Friesen
Ich habe dies verbessert, weil Sie mit 7zip löschen können, löschen Sie auch einen Ordner, der lange verschachtelte Ordner enthält. Hatte mein Problem mit einem Ordner "node_module", der einen Haufen verschachtelter Ordner enthielt und ich konnte ihn nicht entfernen. 7zip aus dem Basisordner fehlerfrei behoben. +1 - Gruber


Keine der anderen (kostenlosen) Antworten hier funktionierte für mich, aber ich fand eine auf einer anderen Seite:

rimraf <dir>

rimraf ist ein Node.js Paket, so müssen Sie Node.js installieren, die enthält npm. Dann können Sie ausführen:

npm install -g rimraf

Dann kannst du rennen rimraf von der Befehlszeile aus.

Ich habe diese Lösung gefunden, weil npm selbst dieses Problem verursacht hat, weil es Abhängigkeiten nistet.

Apropos, rimraf erhält seinen Namen vom UNIX-Befehl rm -rf, die rekursiv Dateien und Ordner löscht.


307
2017-07-04 06:23



Versucht viele Wege. Das funktioniert einfach perfekt! - Duckegg
Die beste Antwort von allen :) ja es ist einfach beasy - Al-Mothafar
Dies sollte die akzeptierte Antwort sein. - NINCOMPOOP
Ihre Lösung funktioniert, aber das ist so f ## k-up, dass ich ein Knoten js Modul zum Löschen von Knoten js Module Ordner verwenden muss ... Ich möchte nicht mehr auf diesem Planeten leben - Benoit P
Node hat das Problem in erster Linie für mich so ... interessant ... dass sie auch eine Lösung haben. - Eric J.


Es gibt keine Notwendigkeit, irgendein Programm zu installieren um dieses Problem zu lösen.

Dieses Problem lässt sich einfach lösen robocopy, vorinstalliert seit Windows Vista, gestartet 2006.

Beispielsweise, rmdir /S /Q <dir> In einigen Fällen ist der Bericht fehlgeschlagen. Es ist nicht notwendig, 7zip oder irgendein anderes Tool von Drittanbietern zu verwenden. Powershell ist ein Overkill. Cygwin funktioniert möglicherweise, aber Sie haben es möglicherweise nicht installiert. Also, konzentrieren wir uns auf robocopy

Die Idee ist es

  1. benutzen robocopy kopieren + aktualisiert
  2. von einem neuer leerer Ordner 
  3. zu dem Ordner, den Sie löschen möchten, das Ziel.

Nach dem Exportieren robocopy, das Zielverzeichnis wäre ebenfalls leer.

Diese Anweisungen gelten für die Befehlszeile. Öffnen Sie einfach die Suche in Windows, geben Sie ein cmd und drücke Enter.

Nehmen wir an, der Ordner, den wir löschen möchten, ist das Ziel

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

  1. Erstellen Sie zuerst ein leeres Verzeichnis, z. C:\emptyfolder.

    mkdir C: \ leerer Ordner

  2. Kopieren + update vom leeren Verzeichnis zum Ziel, mit der Option "/ clean"

    robocopy c: \ emptyfolder "C: \ delete \ this Ordner \ mit einem sehr langen Namen" / clean

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

    rmdir c: \ leererOrdner

Da sich im Quellverzeichnis keine Dateien oder Ordner befinden (C:\emptyfolder), löscht es einfach die Dateien und Ordner unter dem Zielverzeichnis (C:\delete\this folder\with a very long name) rekursiv!

  • Endgültiger Trick: Sie können das Schreiben von Hand vermeiden

    C: \ delete \ this folder \ mit einem sehr langen Namen

    Ziehen Sie den Ordner aus einem Explorer-Fenster und legen Sie das Terminal / cmd-Fenster ab.

Achtung: Die gelöschten Dateien geht nicht in den Müll Mappe! Nach dem Löschen können die Dateien nicht wiederhergestellt werden.

(Genommen von "Pfad zu lang? Verwenden Sie Robocopy" von BVLANGEN)

PS: Ich weiß, diese Antwort war hier, weniger didaktisch. Wie lösche ich eine Datei in Windows mit einem zu langen Dateinamen? [Duplikat]

Benoit hinzugefügt:

Möglicherweise müssen Sie diesen Vorgang mehrmals durchlaufen, um alle Dateien zu löschen.


117
2018-03-03 16:45



Vielen Dank, mein Herr! Dies sollte ebenso wie alle anderen die akzeptierte Antwort sein hat nicht funktioniert oder benötigt a Tool von Drittanbietern. :) - MickyD
Das funktioniert perfekt ... ich muss nichts installieren (so weit ich weiß) und es geht schnell. Dies sollte die akzeptierte Antwort sein! - ksumarine
Dies hält einige (oder alle) der Verzeichnisstruktur unter "c: \ deletefolder" (Zielverzeichnis). Wie auch immer, löschte alles in einem Augenblick für mich (denke, die Dateien waren klein) und ich musste nur manuell <Del> "c: \ deletefolder", die Kinder-Verzeichnisse wurden ohne ein Problem entfernt. Lief wie am Schnürchen. +1, sollte die akzeptierte Antwort sein! :) - rld.
@rld, aber hat "deletefolder" schon existiert? Ansonsten denke ich, dass es leer sein sollte, wenn es ein neues Verzeichnis ist. Sonst ist es ein Durcheinander. Ich könnte einen letzten Schritt für "rmdir deletefolder" hinzufügen. - hectorpal
@hectorpal 1. Ich hatte einen Baum mit Überresten einer Windows C-Laufwerkssicherung von einer anderen Maschine, die ich außer den sehr langen Teilen, d. "% USERPROFILE% / foo / sehr_long_dirname / vldn2 / vldn3 /(...)/ very_long_filename". 2. cd ~; mkdir empty; robocopy empty foo /purge 3. War mit ~ / foo / may_something_deeper_too_cant_remember / zurück und brauchte nicht wirklich Zeit, um weiter zu forschen, weil ich schon sauer auf M $ war, weil er mich missachtete und meine Zeit verschwendet, aber ein einfaches <Delete> auf ~ / foo im Explorer entfernt wurde es erfolgreich, nachdem es endlos (sogar mit dem Besitz) versagt hat, bis Robocopy. - rld.


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

rmdir /S /Q <dir>

scheint zu funktionieren.


79
2017-12-03 19:24



Hat nicht für mich gearbeitet. :( - Andrew Arnott
Denken Sie daran, in cmd zu fallen, bevor Sie versuchen, rmdir auszuführen. - brianpeiris
Für diejenigen, die diese Lösung nicht verwenden können, habe ich eine alternative Lösung, die für mich funktioniert (mit zu langen Pfad- / Dateinamen): Verschieben Sie die Datei (en) / Verzeichnis nach C: \, um den Pfad zu verkürzen, und löschen Sie von dort. - Anders Sandberg Nordbø
Es ist möglich, Verzeichnisse zu haben, für die diese Lösung nicht funktioniert, die 7-Zip löschen kann. Ich hatte gerade das mit mir geschehen. - SamStephens
Diese Lösung erzielt inkonsistente Ergebnisse. Bitte, stimme nicht ab. - hectorpal


Das Werkzeug, das ich verwendet habe, als ich dieses Problem hatte, war FastCopy. ich wählte Alles löschen Wählen Sie aus der Dropdownliste das Verzeichnis aus, das ich löschen möchte, und klicken Sie auf Alles löschen.

FastCopy delete dialog screenshot

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


29
2017-11-25 20:22



Wenn Sie nach einem Befehlszeilentool suchen, können Sie ein kleines Tool verwenden, das ich auf GitHub veröffentlicht habe (github.com/epsitec/Tools-RecursiveDelete). - Pierre Arnaud
Ich hatte einen rekursiv erzeugten Satz von verschachtelten Dateien / Ordnern. Dies war die einzige Lösung, die funktionierte - Pierluigi
Das funktionierte für mich, als die Befehlszeile fehlschlug, der 7zip-Versuch fehlschlug. und sogar Microsoft-Support war ratlos! - Kit Ramos
Das gleiche hier - ich fing an, Dateien mit 7zip zu löschen, aber es wirkte auch sehr seltsam und ich musste Shift + Delere jedes Verzeichnis mehrere Male hintereinander löschen, aber dann habe ich dieses Tool ausprobiert und funktioniert wie ein Zauber . Wurde zweimal gestartet, um alle Dateien zu löschen. Vielen Dank! - Artanis
Danke, für mich auch die einzige funktionierende Lösung, GREAT !!!! - tim


Cygwins rm -rf funktioniert gut auf langen Wegen!


24
2017-09-26 19:40



Cygwin hat perfekt für mich gearbeitet! Habe gerade ein -rm -rf gemacht und alle Dateien wurden gelöscht. - Ranhiru Cooray
Arbeitete für mich auch unter GNU Bash, Version 4.1.10 (4) -Release - rjzii
Hat beim Ausführen aus einem Git Bash-Befehlsfenster funktioniert. Ich hatte GitGui dafür installiert. - Albo Best


Ohne zusätzliche Software zu installieren, die Sie verwenden können subst Befehl zum temporären Erstellen eines Alias ​​zu einem langen benannten Verzeichnis.

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

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

und dann können Sie löschen X:\folder to be deleted im Windows Explorer oder in der Eingabeaufforderung einfach. Verwenden Sie den Befehl, um den temporären Laufwerksbuchstabenalias zu entfernen

subst x: /d

22
2017-10-28 06:09



Ich habe alle anderen Antworten (einschließlich Antworten von anderen ähnlichen Fragen) ausprobiert und dies war die einzige, die am Ende für mich arbeitete. Und es war mit Abstand der schnellste. - glenneroo
Dies ist bei weitem die beste Antwort: einfache, integrierte Funktionen, keine Unordnung mit der Registrierung. Sollte die akzeptierte Antwort sein. - Kevin Roche
Einfach die sauberste und einfachste Methode, danke Kenneth. - Seth