Eclipse hat einen temporären Ordner in einem der Verzeichnisse erstellt, der ziemlich tief verschachtelt ist, z
dir1\dir1\dir1\dir1\...
Ich kann diesen Ordner in Windows nicht über den Explorer, die Befehle del
oder rmdir
oder den Cygwin-Befehl 'rm' löschen . Wie soll ich diesen sehr langen Ordner entfernen?
Es sagt immer nur "Dateiname zu lang ..."
Antworten:
Wenn Sie wie ich sind und keine zusätzliche Software installieren möchten , um ein Problem wie dieses zu beheben, gehe ich auf den Vorschlag von XQYZ ein und benutze ihn
robocopy
, um das Problem zu lösen. (In meinem Fall wurde das Problem in erster Linie durch Robocopy verursacht, indem ein Verzeichnis kopiert wurde, das rekursive Knotenpunkte enthielt, ohne / XJ an Robocopy zu übergeben.)So löschen Sie den Verzeichnisbaum, der bei c: \ subdir \ more \ offending_dir beginnt :
Der gesamte Schritt-für-Schritt-Prozess ist so einfach:
cd c:\subdir\more
auf CD in das übergeordnete Verzeichnis.mkdir empty
um ein leeres Verzeichnis zu erstellen.robocopy empty offending_dir /mir
um das leere Verzeichnis in das fehlerhafte zu spiegeln.rmdir offending_dir
das jetzt leere beleidigende Verzeichnis loszuwerden undrmdir empty
um Ihr leeres Zwischenverzeichnis loszuwerden.quelle
robocopy
und Knotenpunkten gemacht; danke, dass du mir gezeigt hast, wie man es benutzt, um das Chaos zu beseitigen!Dies ist eigentlich ganz einfach zu beheben. Angenommen, die Verzeichnisstruktur lautet wie folgt:
Um das Problem zu beheben, benennen Sie einfach jeden Ordner in einen aus einem Zeichen bestehenden Ordnernamen um, bis das Löschen nicht mehr zu lange dauert:
C:\Dir1
inC:\D
C:\D\
C:\D\Dir1
inC:\D\D
C:\D\D\
Hier ist eine Batch-Datei zur Automatisierung des Prozesses (diese einfache Version eignet sich am besten für einfache Verzeichnisse wie das in der Frage beschriebene, insbesondere für Einwegverzeichnisse). Übergebe es dem höchstmöglichen Ordner (zB
C:\Dir1
fürC:\Dir1\Dir1\Dir1…
oderC:\Users\Bob\Desktop\New Folder
fürC:\Users\Bob\Desktop\New Folder\abcdefghi…
)Technische Erklärung
Die anderen vorgeschlagenen Lösungen sind rückwärts; Sie können es nicht beheben, indem Sie sich vom innersten Verzeichnis nach außen arbeiten. Sie müssen in die andere Richtung gehen.
Wenn Sie versuchen, auf ein Verzeichnis zuzugreifen, verwenden Sie explizit oder nicht explizit dessen absoluten Pfad, der alles beinhaltet, was davor stand. Daher
C:\Dir1\Dir1\Dir1\Dir1
beträgt für eine Verzeichnisstruktur wieDir1
22 die Länge des Pfads zum Innersten . Die Länge des Pfads zum ÄußerstenDir1
beträgt jedoch nur 7 und ist daher unabhängig von seinem Inhalt (im Kontext des Pfads eines bestimmten Verzeichnisses) immer noch zugänglich hat das Dateisystem keine Kenntnis darüber, was es enthält oder welche Auswirkungen es auf die Gesamtpfadlänge seiner untergeordneten Verzeichnisse hat, sondern nur auf seine Vorgängerverzeichnisse - Sie können ein Verzeichnis nicht umbenennen, wenn die Gesamtpfadlänge zu lang ist.Wenn Sie auf einen zu langen Pfad stoßen, müssen Sie daher zur höchstmöglichen Ebene wechseln und sie in einen Namen mit einem Buchstaben umbenennen und für jede Ebene darin wiederholen. Jedes Mal, wenn Sie dies tun, verkürzt sich die Gesamtlänge des Pfads um den Unterschied zwischen dem alten und dem neuen Namen.
Auch das Gegenteil ist der Fall. Sie können keinen Pfad erstellen, der die maximal unterstützte Länge überschreitet (unter DOS und Windows
MAX_PATH = 260
). Sie können Verzeichnisse jedoch von innen nach außen in einen längeren Namen umbenennen. Das Ergebnis ist, dass auf tiefere Ordner mit einem absoluten Pfad von> 260 nicht zugegriffen werden kann. (Das macht sie nicht "versteckt" oder sicher, da sie einfach genug sind, um darauf zuzugreifen. Verwenden Sie diese Methode also nicht, um Dateien auszublenden.)Interessante Randnotiz
Wenn Sie Ordner in Windows 7 Explorer erstellen, kann es so aussehen, als ob Sie in Explorer Unterverzeichnisse erstellen können, deren Gesamtlänge länger ist als
MAX_PATH
und tatsächlich betrügt dies jedoch tatsächlich mit „DOS 8.3-Dateinamen“. Sie können dies anzeigen, indem Sie einen Baum wie den folgenden erstellen:Es ist 696 Zeichen lang, was natürlich viel länger als 260 Zeichen ist. Wenn Sie im Explorer zum innersten Unterverzeichnis navigieren, wird es erwartungsgemäß in der Adressleiste angezeigt, wenn es nicht im Fokus ist, aber wenn Sie auf die Adresse klicken In der Leiste ändert sich der Pfad zu
C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, der nur 102 Zeichen lang ist.In XP wird dies nicht ausgeführt, stattdessen weigert es sich standhaft, einen längeren Pfad zu erstellen, als unterstützt wird.
Was wirklich interessant wäre, ist herauszufinden, wie Windows 7 Explorer mit zu langen Pfaden umgeht, wenn die
NtfsDisable8dot3NameCreation
Option aktiviert ist.quelle
\\?` doesn't work with
rmdir`.\\?\C:\dir\dir\dir\dir
buchstäblich MAX_PATH. Es sind keine "Variablen" beteiligt. (Aber wie ich schon sagte, es funktioniert aus irgendeinem Grund nicht mit oder anderen Builtins.)rmdir
cmd.exe
md C:\01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
Sie es mit "Ausführen". Dies funktioniert nicht, da das Dateisystem über ausreichende Informationen verfügt, um zu bestimmen, dass die gesamte Pfadlänge 263 Zeichen betragen würde. Daher schlägt dies fehl.Sie können den Pfad verkürzen, indem Sie
subst
ein virtuelles Laufwerk erstellen:Wechseln Sie in das virtuelle Laufwerk:
Jetzt können Sie die Dateien löschen:
Entfernen Sie das virtuelle Laufwerk:
Entfernen Sie das Verzeichnis:
quelle
C:\TEMP\dir1\dir1\dir1
, dann wird es einen Teil davon verkürzen, so dass Sie einsteigen können. Es ist genau wie Ihr Vorschlag der Umbenennung, aber mit Mapping statt. ;):-)
Ich habe eine kleine C # -App geschrieben, um eine ähnliche, sehr tiefe Struktur zu löschen, die durch eine unachtsame Verwendung von Robocopy und ein Backup von Homeserver generiert wurde. Standardmäßig behandelt Robocopy Gelenkpunkte als normale Ordner ... :-( Sie könnten ein großes Durcheinander erleben, ohne es zu bemerken.
Das Tool ist bei CodePlex mit Quelldateien erhältlich und kann von jedermann verwendet werden.
quelle
Vor einiger Zeit habe ich ein kleines, eigenständiges Dienstprogramm namens DeleteFiles erstellt , mit dem Sie diese Aufgabe einfach ausführen können.
Mit diesem eigenständigen Dienstprogramm können Sie einfach Folgendes tun:
um die gesamte Ordnerstruktur zu löschen. -r recurses die Ordnerhierarchie aus dem Startverzeichnis nach unten, -f alle Ordner löscht , die leer sind (die alle von ihnen sein wird , wenn Sie verwenden . als Filespec). DeleteFiles unterstützt Pfade, die länger als das Windows MAX_PATH-Limit sind, sodass es für tief verschachtelte Ordner problemlos funktioniert.
DeleteFiles ist kostenlos und Open Source. Sie können entweder den Binärcode oder den Quellcode von GitHub herunterladen oder direkt mit Chocolatey installieren
quelle
> NUL
zum Ende den Prozess beschleunigen.Einfach und unkompliziert
Ich hatte das gleiche Problem seit so langer Zeit mit node_modules, die sehr verschachtelte Ordner. also endlich ein script gemacht um das zu beheben was ordner löschen kann indem pfade gekürzt werden.
https://github.com/dev-mraj/fdel
quelle
Während der Arbeit mit Sikuli wurde ich mit einer Calculator.sikuli-Rekursionsschleife in dem Programm überlistet, die eine unzählige Menge von "calculator.sikuli.calculator.sikuli" -Dirs erzeugte. Ich könnte den Baum verschieben, aber der Pfadname ist zu lang, um ihn zu löschen.
Nachdem ich mehrere Lösungen mit popd loop, Scandisk ausprobiert habe und (merklich) nirgendwo hingekommen bin ....
Ich habe dieses Skript geschrieben, um tief in die rekursiven Verzeichnisse (in ein Verzeichnis mit dem Namen "a") zu gehen, sie zu verschieben (in ein Verzeichnis mit dem Namen "b"), dann den abgeschnittenen Baum zu löschen und sie zurück zu verschieben (nach "a"). , und wiederholen:
Remdirs.bat
Dies ist nur ein Aufruf, um die Batchdatei erneut auszuführen.
quelle
Wir hatten ein Problem wie dieses bei der Arbeit, als Eclipse beschloss, Müll auf den Festplatten zu erzeugen. Wir haben es behoben, indem wir die / MIR-Funktion von robocopy verwendet haben, um ein leeres Verzeichnis in das verschachtelte zu spiegeln.
quelle
Ich würde versuchen, eine Eingabeaufforderung zu öffnen und Folgendes auszuführen:
Wenn das nicht funktioniert, würde ich mich halbwegs in den Verzeichnisbaum einarbeiten und versuchen, eine Untergruppe der Verzeichnisse zu löschen - sagen wir die 20 innersten Verzeichnisse - und mich dann von dort herauszuarbeiten.
quelle
;-)
Wenn es sich um einen Netzwerkordner handelt, geben Sie einfach das übergeordnete Verzeichnis dieses Verzeichnisses frei, ordnen Sie es einem Laufwerk auf Ihrem lokalen Computer zu und löschen Sie dann Ihren Ordner.
quelle
Öffnen Sie eine Eingabeaufforderung.
Navigieren Sie zu dem Ordner / Verzeichnis, der das höchste 'dir1' enthält (wir gehen von C: \ aus).
Bearbeiten (nach Kommentaren) :
Andere Ideen:
MS bietet Informationen darüber , wie mit dem Problem zu befassen (viele Ideen zu versuchen) hier .
Es gibt auch dieses Tool (das ich nie persönlich benutzt habe) - TooLongPath .
Vielleicht schreiben Sie etwas (seit Sie Eclipse haben), das ganz nach innen navigiert und dann jeweils eine Ordnerebene zurücksetzt und dabei löscht?
quelle
Eine andere Lösung: Laden Sie Total Commander herunter. Es ist ein sehr nützliches Programm, nicht nur, weil es lange Dateinamen kennt.
Die nicht registrierte Version ist nagware, aber voll funktionsfähig, es wird den Job erledigen.
quelle
Dies kann direkt über die Befehlszeile oder in einer Batch-Datei erfolgen, indem ein UNC-Pfad zu dem zu löschenden Verzeichnis erstellt wird
also statt
verwenden
Solche Pfade im UNC-Stil können viel länger sein und die 260-Zeichen-Grenze umgehen.
quelle
The path \\?\C:\temp\wqiyretiuqyertiuyqwteiyrutqwuiyertiqrqweirqyert\wqteriuwqyetriuqwteiryutwiuertiuyqerieerrt\IOQWUE~1\QIWUYE~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\ OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1 is too long.
Windows 7 64-Bit.Wenn ich dieses Problem habe, benenne ich einfach einige der Ordnernamen viel kürzer um. Sobald der Gesamtpfad kurz genug ist, wird OK gelöscht. Es werden keine zusätzlichen Werkzeuge benötigt.
quelle
ren
Befehl mit fehlschlägtpath too long
.Ich hatte das gleiche Problem, außer dass es durch eine rekursive Cobian Backup-Aufgabe erstellt wurde. Ich stelle fest, dass die kostenlose Cobian-Software eine Deleter-Anwendung enthält, mit der sich diese lästigen verschachtelten Ordner sehr schnell entfernen lassen.
Es befindet sich unter dem Menü Extras.
quelle
Ich bin auf dasselbe Problem gestoßen, bei dem es um mehr als 5000 verzeichnisintensive Ordner ging, wie bei einigen Java-Anwendungen, und ich habe ein Programm geschrieben, mit dem Sie diesen Ordner entfernen können. Der gesamte Quellcode befindet sich in diesem Link:
https://gitlab.imanolbarba.net/imanol/DiREKT
Es hat das Ganze nach einer Weile entfernt, aber es hat es geschafft, die Arbeit zu erledigen. Ich hoffe, es hilft Menschen, die (wie ich) auf dasselbe frustrierende Problem stoßen
quelle
Ihr Dateisystem ist möglicherweise beschädigt. Führen Sie chkdsk aus, um festzustellen, ob Reparaturen durchgeführt wurden, und löschen Sie dann den Ordner.
quelle
MAX_PATH=255
). Dies kann sogar mit einem nicht beschädigten Dateisystem passieren.