Erzwinge das Löschen von Dateien mit einem ziemlich großen Namen

62

Ich verwalte mit Node.js regelmäßig Abhängigkeiten für Programme, die ich schreibe, keine große Sache. Heute hatte ich eine Ordnerstruktur wie diese:Bildbeschreibung hier eingeben

Beim Versuch, eine Datei zu löschen, ist folgender Fehler aufgetreten:

Die Quelldateinamen sind größer als vom Dateisystem unterstützt. Versuchen Sie, an einen Ort mit einem kürzeren Pfadnamen zu wechseln, oder benennen Sie ihn in kürzere Namen um, bevor Sie diesen Vorgang ausführen.

Es war bereits in C: \, also würde es nicht viel kürzer werden.

Seiyria
quelle
Haben Sie eine Ahnung, wie Ihre Ordnerstruktur so groß wurde? Bei der Installation von grunt stieß ich auf dieselbe Situation.
Eran Otzer
1
@eranotzer mit npm.
Seiyria
Ich habe nicht die Abhängigkeiten in Ihrem packages.json wo falsch geschrieben?
Eran Otzer
@eranotzer Ja. Aufgrund der Funktionsweise von npm @ 2 hat jede Abhängigkeit ihre Abhängigkeiten in sich verschachtelt. Dies bedeutete, dass Abhängigkeitsketten beliebig lang sein konnten. npm @ 3 versucht, dieses Verhalten anzupassen.
Seiyria

Antworten:

75

Verwenden Sie das Microsoft-Tool robocopy.exe.

  1. Erstellen Sie einen neuen leeren Ordner, z c:\empty
  2. Kopieren Sie dann diesen leeren Ordner in den Ordner, der die langen Dateinamen enthält, die Sie löschen möchten, z c:\myannoyingfolder. Tun Sie dies in der Eingabeaufforderung wie folgt:

    robocopy / MIR c: \ empty c: \ myannoyingfolder

Flo
quelle
Da dies oft genug Teil meines Workflows ist, habe ich herausgefunden, wie ich es in die Windows-Shell integrieren kann. Siehe meine Antwort unten. :)
toddmo
Hinweis: Dieser Befehl kann einige Sekunden oder sogar Minuten dauern. Also mach dir keine Sorgen und lass es zaubern :-)
Adil Malik
Danke, hat für mich gearbeitet. Ich musste sicherstellen, dass ich auch alle Prozesse (IIS) beendet habe, die noch an einer der Dateien festhielten.
Slick Shinobi
Immer wenn ich versuche, robocopy.exe zu öffnen, blinkt ein Fenster für eine Sekunde und dann passiert nichts. Bitte helfen Sie
Maulik Modi
29

Okay, nehmen wir an, Sie möchten einen Baum löschen D:\very\long\path, müssen aber nicht unbedingt Werkzeuge wie Robocopy verwenden.

  1. Wechseln Sie in das Stammverzeichnis des Laufwerks, in dem sich das Verzeichnis befindet, das Sie nicht löschen können
  2. Erstellen Sie ein Verzeichnis mit einem einzelnen Buchstaben, z D:\a
  3. Navigieren Sie in diesem Fall zu dem Verzeichnis, das Sie löschen möchten D:\very\long\path
  4. Alles auswählen ( Ctrl+ A) und ausschneiden ( Ctrl- X)
  5. Navigieren Sie zu dem Ordner, den Sie gerade erstellt haben
  6. Einfügen ( Ctrl- V)
  7. Wechseln Sie nun in das Stammverzeichnis und löschen Sie in diesem Fall den temporären Ordner D:\a
  8. Gehen Sie dann zurück und löschen Sie das ursprüngliche Verzeichnis
gd73
quelle
2
Das hat bei mir beim ersten Versuch nicht geklappt. Nachdem ich diesen Vorgang jedoch einige weitere Ordnerebenen wiederholt hatte, konnte ich alles löschen.
Abaldwin99
1
Tolle Lösung, hat einwandfrei funktioniert. Einfach und effektiv, danke!
Caner Öncü
GROSS!! klappt wunderbar!!! Es werden keine weiteren Werkzeuge benötigt. Vielen Dank!
Prasanth KC
Das funktioniert prima, und ich möchte dem noch einen Punkt hinzufügen. Wenn das Auswählen von Dateien aus dem Pfad nicht funktioniert, können Sie einen Ordner irgendwo in der Mitte des langen Pfads auswählen und diesen Ordner stattdessen in einen temporären Ordner verschieben und dann löschen beide auf ähnliche Weise.
Narayana Nagireddi
4

Ich habe angefangen, dieses Problem zu tippen, während ich eine Vielzahl von Befehlen ausprobiert habe, einschließlich del /Fund rmdir /S( und beim Löschen die Umschalttaste gedrückt gehalten, um zu versuchen, den Papierkorb zu umgehen). Ich denke, dass rmdir /Statsächlich alle Dateien gelöscht, so dass ich mit dem Löschen der Ordner fortfahren konnte, die Blattknoten waren, und dann den Baum ein paar Knoten nach dem anderen weiterentwickelte. Schließlich habe ich sie alle aufgeräumt, aber das war lächerlich.

Seiyria
quelle
4

Sie können diese Funktionalität in die Windows-Shell integrieren. Meine Verbesserung von Flos Antwort war zu lang für einen Kommentar.

Ich Deletehabe dem Windows-Kontextmenü einen Befehl hinzugefügt .

Bildbeschreibung hier eingeben

Die delete.regDatei fügt Registrierungseinträge hinzu, um der robodelete.batBatchdatei Ordner zuzuordnen.

delete.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete]

[HKEY_CLASSES_ROOT\Directory\shell\Delete\command]
"Extended"=""
@="\"D:\\Documents\\robodelete.bat\" \"%1\""

robodelete.bat

mkdir c:\empty
robocopy /MIR c:\empty %1
rmdir %1
rmdir c:\empty

Hinweis : Möglicherweise müssen Sie die Pfade in beiden Dateien gemäß Ihren Einstellungen ändern.

WARNUNG : Dieser Befehl kann nicht rückgängig gemacht werden. Der Papierkorb wird nicht verwendet, und Y / N wird nicht aufgefordert, dies zu bestätigen, bevor der Ordner endgültig gelöscht wird.

toddmo
quelle
Danke für die Warnung. Ich brauche das auch in meinem Workflow, aber ich möchte vermeiden, dass in meinem Rechtsklick-Menü ein Nuklear-Button angezeigt wird, für den keine J / N-Bestätigung vorliegt. Wenn ich Zeit habe, werde ich versuchen, diese Anpassung vorzunehmen und eine Änderung vorschlagen.
abaldwin99
1
@ abaldwin99, so vielleicht stackoverflow.com/a/1807318/1045881
toddmo
4

Das Open-Source-Befehlszeilentool SuperDelete ( GitHub ) hat bei mir funktioniert, nachdem andere Optionen fehlgeschlagen sind (Windows 10).

Joshua Fox
quelle
3

Der beste Weg, dies zu tun, ist die Verwendung von Robocopy. Ich habe dies in meinem persönlichen Blog dokumentiert, damit Sie Folgendes verfolgen können:

http://clintboessen.blogspot.com.au/2014/05/how-to-delete-files-which-exceed-255.html

Clint
quelle
4
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier einzuschließen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert oder verschwindet.
Andrea
0

In vielen Fällen funktioniert es, wenn Sie von einer Eingabeaufforderung aus eine CD in das Verzeichnis kopieren und DEL verwenden.

Wenn nicht, müssen Sie Ihren Namen in der Verzeichnisstruktur nachbearbeiten: Benennen Sie den Ordner der untersten Ebene in einen kürzeren Namen (z. B. "a"), dann den nächsthöheren Ordnernamen usw. um, bis der Gesamtpfad kurz genug ist. Wenn Sie von unten nach oben arbeiten, bearbeiten Sie immer Namen, deren vollständiger Pfad kürzer ist als der der endgültigen Dateien.

Eugen Rieck
quelle
0
  • Öffnen Sie die administrative Eingabeaufforderung
  • net use z: c:\path
  • del z:\*.*

Dementsprechend anpassen. Z: ist nur ein beliebiger Laufwerksbuchstabe, auf den der fehlerhafte Pfad abgebildet wird. Dieser letzte Löschbefehl löscht das GANZE Verzeichnis, das Sie zugeordnet haben - seien Sie also bei Bedarf genauer.

Bradley Forney
quelle
2
Dies ist sehr gefährlich für Nicht-Power-User! Es besteht die Möglichkeit, ein Laufwerk zu löschen, wenn dies falsch gemacht wird.
Rudi Strydom
100% einverstanden. Gehen Sie in diesem Fall auf jeden Fall mit Vorsicht vor.
Bradley Forney
0

Ein guter Weg ist es, bootfähiges Linux auf pendrive zu haben und Dateien ohne Probleme von der Live-CD zu löschen .

Dariusz Filipiak
quelle
-1

Ich hatte auch das gleiche Problem, und ich fand es selbst, einfach den übergeordneten Ordner so wenig wie möglich umzubenennen. Ex. Wenn unser Ordner in " D " Laufwerk wie D: // Folder / Undelete_Folder . Das einzige, was Sie tun müssen, ist, dass Sie den übergeordneten Ordnernamen so klein wie " a " umbenennen können . dann ist Ihr Standort D: // a / Undelete_folde r. und löschen Sie dann den übergeordneten Ordner.

Rohit R
quelle
Dies funktioniert nicht nur nicht unbedingt (was ist, wenn es trotz der Reduzierung immer noch größer ist?), Sondern ich habe ausdrücklich erwähnt, dass sich mein Ordner im Stammverzeichnis des Laufwerks befindet.
Seiyria
-2

Wenn alle Stricke reißen

Gehen Sie zum letzten Verzeichnis in der Zeichenfolge. Schneiden Sie die Dateien aus. Fügen Sie sie in die vierte oder fünfte Datei in der Zeichenfolge ein. Dann sollte [Shift] + [Delete] den Trick machen.

Ich war skeptisch, die obige Eingabeaufforderung mit erhöhten Rechten auszuführen, als ich eine Testwiederherstellungsdatei aus einer DPM-Sicherung löschte.

hoffe das hilft.

Andre
quelle
Dies wird wahrscheinlich nicht funktionieren, da sie immer noch diesen langen Dateipfad für den Schneidevorgang haben.
Seiyria