Windows scheint beim Versuch, Dateien zu löschen, eine Längenbeschränkung für Dateinamen zu haben, die jedoch nicht die Erstellung dieser Dateien verhindert.
Unser Erstellungsprozess erstellt eine Reihe von temporären Dateien (von denen viele aus einer WSDL erstellt wurden), die diese Grenze überschreiten. Unser Ameisenskript ist irgendwie in der Lage, sie zu löschen, wenn eine Bereinigung durchgeführt wird, aber manchmal muss ich das Arbeitsbereichsverzeichnis (in das alle temporären Dateien verschoben werden) löschen, ohne tatsächlich eine vollständige Bereinigung von der Ameise durchzuführen.
Dies sind die gleichen Fehler wie bei dieser Frage , aber die Antworten dort funktionieren bei mir nicht wirklich, da es sich um ein Verzeichnis handelt, nicht um eine Datei, und ich weiß nicht immer, welche bestimmten Dateien oder Unterverzeichnisse das Problem verursachen. Und ich versuche, jeden manuellen Vorgang (außer das Auslösen eines einzelnen 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 Powershell gibt die 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 Tools oder einfache Möglichkeiten, um diesen Löschfehler zu umgehen, ohne die problematischen Dateien manuell finden und verschieben / umbenennen zu müssen?
quelle
Ubuntu
oderLinux Bootable CD
mitUbuntu
einem anderen Betriebssystem können wir unseren Computer vorübergehend auf einem anderen Betriebssystem booten . Dann können wir den Ordner auswählen und ihn einfach löschen.Antworten:
Verwenden Sie den 7-Zip- Dateimanager, um sie zu löschen.
Wenn Sie weiterhin Probleme haben, stellen Sie sicher, dass Sie Shift+ Deleteim 7-Zip-Dateimanager verwenden. Andernfalls versucht Windows, sie in den Papierkorb zu verschieben (was erneut fehlschlägt).
quelle
shift + Del
wie @cori sagte. Wenn Sie dieDelete
Option aus dem Kontextmenü auswählen , schlägt sie dort fehl.shift + Del
es!Keine der anderen (kostenlosen) Antworten hier hat für mich funktioniert, aber ich habe eine auf einer anderen Seite gefunden:
rimraf ist ein Node.js- Paket, daher müssen Sie Node.js installieren, das npm enthält . Dann kannst du laufen:
Dann können Sie
rimraf
von der Befehlszeile ausführen .Ich habe diese Lösung gefunden, weil npm selbst dieses Problem verursacht hat, weil es Abhängigkeiten verschachtelt.
rimraf
Erhält seinen Namen übrigens vom UNIX-Befehlrm -rf
, der rekursiv Dateien und Ordner löscht.quelle
Es ist nicht erforderlich, ein Programm zu installieren, um dieses Problem zu beheben.
Dieses Problem lässt sich mit
robocopy
Windows Vista, das 2006 gestartet wurde, leicht beheben .Beispielsweise
rmdir /S /Q <dir>
wurde berichtet, dass in einigen Fällen fehlgeschlagen ist. Es ist nicht erforderlich, 7zip oder ein anderes Tool von Drittanbietern zu verwenden. Powershell ist ein Overkill. Cygwin funktioniert möglicherweise, ist jedoch möglicherweise nicht installiert. Konzentrieren wir uns also aufrobocopy
Die Idee ist zu
robocopy
zum Kopieren + aktualisiertNach der Ausführung wäre
robocopy
auch das Zielverzeichnis leer.Diese Anweisungen gelten für die Befehlszeile. Öffnen Sie einfach die Suche in Windows, geben Sie ein
cmd
und drücken Sie die Eingabetaste.Angenommen, das Ziel für das Löschen ist:
Wir gehen wie folgt vor:
Erstellen Sie zunächst ein leeres Verzeichnis, z
C:\emptyfolder
.Kopieren + Aktualisieren aus dem leeren Verzeichnis in das Ziel mit der Option
/purge
Löschen Sie das leere Verzeichnis. Du brauchst es nicht mehr.
Da sich im Quellverzeichnis (
C:\emptyfolder
) keine Dateien oder Ordner befinden, werden die Dateien und Ordner im Zielverzeichnis (C:\delete\this folder\with a very long name
) einfach rekursiv gelöscht!Letzter Trick: Sie können das Schreiben von Hand vermeiden
Durch Ziehen des Ordners aus einem Explorer-Fenster und Ablegen im Terminal / cmd-Fenster.
Achtung : Die gelöschten Dateien werden nicht in den Papierkorb verschoben! Einmal gelöschte Dateien können nicht wiederhergestellt werden.
(Aus "Path too long? Use Robocopy" von BVLANGEN )
PS: Mir ist klar, dass diese Antwort weniger didaktisch war. Wie lösche ich eine Datei in Windows mit einem zu langen Dateinamen? [Duplikat]
Benoit fügte hinzu:
quelle
Ich glaube, ich habe einen Weg gefunden, Dinge aus zu löschen
cmd
. Ursprünglich habe ich dendel
Befehl ausprobiert , aber das hat nicht funktioniert. Dann erinnerte ich michrmdir
. Folgendes tun:scheint funktioniert zu haben.
quelle
Das Tool, mit dem ich dieses Problem hatte, war FastCopy . Ich habe in der Dropdown-Liste Alle löschen ausgewählt, das zu löschende Verzeichnis ausgewählt und auf Alle löschen geklickt .
FastCopy ist portabel (keine Installation erforderlich) und es sind 32-Bit- und 64-Bit-Versionen verfügbar.
quelle
Ohne Installation zusätzlicher Software können Sie mithilfe des
subst
Befehls einen Alias für ein Verzeichnis mit langem Namen temporär erstellen.Wenn Sie z. B. einen Ordner löschen möchten,
C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted
können Sie den Befehl verwendenund dann können Sie
X:\folder to be deleted
in Windows Explorer oder in der Eingabeaufforderung leicht löschen . Verwenden Sie den Befehl, um den Alias für den temporären Laufwerksbuchstaben zu entfernenquelle
Cygwin
rm -rf
funktioniert gut auf langen Wegen!quelle
Gehen Sie einfach von Powershell aus wie folgt vor:
quelle
Die Lösung von Dentrasi hat für mich am besten funktioniert, aber ich wollte die einzelnen Schritte in einer Antwort auf höchster Ebene veröffentlichen.
quelle
In den vorhandenen Antworten werden zwei Dinge nicht bereits erwähnt.
Präfix für langen Pfad
Die Windows-API verfügt über eine spezielle Funktion, die Unicode-Pfadnamen mit einer Länge von bis zu 32 KB unterstützt (jedes Element kann bis zu 255 Zeichen lang sein).
Dies wird oft fälschlicherweise als UNC-Benennung bezeichnet, ist aber nicht verwandt.
Das Präfix, mit dem die API angewiesen wird, lange Unicode-Pfade zu verwenden, lautet
\\?\
wie folgt :UNC-Namen werden normalerweise verwendet, wenn auf Pfade auf Remoteservern im Formular verwiesen wird
\\servername\path name\file name
. Sie können dies mit dem Präfix für lange Pfade kombinieren, um Folgendes zu erreichen:\\?\UNC\server\share
Beachten Sie, dass einige, schlecht geschriebene, aber leider weit verbreitete Anwendungen weder UNC-Dateipfade noch das Präfix für lange Pfade unterstützen.
Referenz: https://msdn.microsoft.com/de-de/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
Unterstützung für lange Wege
Dies ist eine Option, die neueren Versionen von Windows 10 hinzugefügt wurde. Sie ist zum Zeitpunkt des Schreibens nicht standardmäßig aktiviert, da eine spezielle Anwendungsunterstützung erforderlich ist. Interessanterweise verfügt PowerShell über eine integrierte Unterstützung, sodass durch Aktivieren dieser Option lange Pfade direkt in PowerShell-Skripten verwendet werden können.
Sie können es über den Gruppenrichtlinien-Editor aktivieren, wenn Sie über eine Windows-Version verfügen. Oder Sie können einfach die folgende Registrierungsänderung verwenden. Sichern Sie wie immer den Bereich der Registrierung, den Sie ändern, bevor Sie etwas tun.
regedit.exe
.HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
LongPathsEnabled
.LongPathsEnabled
zu1
aktivieren.Alle Anwendungen mit entsprechenden Manifest-Einträgen haben jetzt Zugriff auf lange POSIX-Standardpfade. Dies sollte Windows Store-Apps 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 über ein Problem mit dem Registrierungsschlüssel, so habe ich einige mehr zu graben . Sie können nun die Unterstützung für lange Dateinamen mit einem Systemschlüssel festlegen:
Dies funktioniert jedoch nur für Anwendungen, die speziell für die Verwendung eingestellt sind (erfordert einen Eintrag in der Datei manifest.xml der Anwendung).
Sie sollten auch beachten, dass Sie mit dieser Methode keine relativen Pfadnamen verwenden können.
quelle
{48981759-12F2-42A6-A048-028B3973495F}Machine
Ein Teil des Registrierungspfads ist auf jedem Computer anders - es ist möglicherweise nicht für jeden offensichtlichIch mag die cmd-Lösung. Obwohl ich eine andere Problemumgehung teilen 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
.. .. Ein tolles Projekt im Frühjahr 2014
.. .. .. Eine Aktivität im Park in der Stadt am Freitag
.. .. .. .. Bla bla bla bla bla bla bla bla bla bla
.. .. .. .. .. Auch aktuelle Dateien mit langen Namen
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, den Pfad verkürzen und dann den Ordner entfernen. Die Namen können nur Buchstaben sein:
C: \
.. Projekte
.. .. X
.. .. .. y
.. .. .. .. z
.. .. .. .. .. Auch aktuelle Dateien mit langen Namen
In meinem Fall wollte ich nur den gesamten Ordner mit vielen Unterordnern und Dateien entfernen. Die Namen der Ordner waren mir also egal.
quelle
Die 7-Zip-Lösung funktioniert hervorragend. Eine andere Möglichkeit, wenn Sie git installiert haben, besteht darin, eine Bash-Shell zu öffnen und Folgendes zu verwenden:
rm -f
(oder
rm -rf
für Ordner)quelle
Git Bash Here
Ich schlage Total Commander vor (Shareware, arbeitet aber nach der Testphase mit nur einem minimalen Nag-Startbildschirm weiter). Auf diese Weise löse ich immer die Probleme mit zu langen Dateinamen .
quelle
chkdsk
sollte es gelöst werden.Sie können sie auch mit ihrem entsprechenden Kurznamen löschen.
dir /x
werde es dir zeigen.quelle
Ich habe ein einfaches Java-Programm erstellt, das Robocopy zum Löschen der Dateien verwendet. Das Glas ist ein lauffähiges. Für zusätzliche Ausgabe führen Sie es aus der cmd-Zeile aus.
https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing
quelle
Ich habe alle anderen Antworten ausprobiert, aber sie haben nicht funktioniert (zumindest für mich).
Ich bin auf delinfile gestoßen und habe recht gut und ziemlich schnell gearbeitet!
Die Testversion ist auf 3 Aktionen / 15 Tage beschränkt, kann jedoch verwendet werden, wenn Sie nur einige Ordner / Dateien löschen möchten:
quelle
Bigger Directories ist auch für diese Aufgabe ausgelegt.
Mehr Infos unter CodeProject .
quelle
Ich hatte dieses Problem in Windows 10 und fand diese einfache Lösung.
quelle
Habe hier die perfekte Antwort (für Dateien). Funktioniert in Windows 10.
Siehe auch: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath
Keine einzige alternative Antwort in 4 Fragen reichte für meine Bedürfnisse aus. Gern geschehen, Welt.
quelle
Ich habe endlich herausgefunden, wie das mit Powershell geht. Hier sind die Anweisungen, die ich befolgt habe, damit dies unter Windows 7 funktioniert:
Erstellen Sie einen neuen Ordner mit dem Namen NTFSSecurity im Ordner C: \ Users \ XXXX \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity , wobei XXXX Ihr Windows-Benutzername ist. Beispiel: Wenn mein Benutzername " aspnyc " lautet , lautet der neue Ordner " C: \ Users \ aspnyc \ Documents \ WindowsPowerShell \ Modules \ NTFSSecurity" .
Laden Sie das PowerShell-Modulpaket für Dateisystemsicherheit herunter. Es sollte als einfache ZIP-Datei verfügbar sein.
quelle
Endlich habe ich herausgefunden, wie das mit Powershell unter Windows 10 geht, wo die einzelnen Dateinamen zu lang waren. Hier sind die Schritte, die ich ausgeführt habe, damit dies unter Windows 10 funktioniert:
quelle
Wenn Sie Bash unter Ubuntu unter Windows installiert haben, können Sie in einer regulären Eingabeaufforderung in das übergeordnete Verzeichnis wechseln und dann Folgendes eingeben:
Womit bash gestartet wird, wird das Verzeichnis unter Linux rekursiv gelöscht, wobei es keine Dateinamenbeschränkungen gibt, und anschließend wird die reguläre Eingabeaufforderung beendet.
quelle
Navigieren Sie zu dem Verzeichnis in WinRAR, wählen Sie die Datei aus, drücken Sie F2, und 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
quelle