Wie entferne ich eine Datei mit dem Namen "NUL" unter Windows?

49

Ich habe eine Windows XP-Box (NTFS-Dateisystem), auf der ich eine Datei mit dem Namen gefunden habe NUL. Ich war nicht in der Lage, diese Datei auf übliche Weise zu entfernen. Die Datei scheint im Besitz Administratorder SYSTEMGruppe zu sein, im Gegensatz zu jeder anderen Datei im selben Verzeichnis (die anderen Dateien gehören meiner Benutzer-ID).

Wie werde ich diese Datei los? Wo ist es hergekommen?

Greg Mattes
quelle
3
NUL ist ein vom System reserviertes Wort. Siehe diesen Wikipedia-Artikel . Eine Datei mit dem Namen NUL sollte niemals im Dateisystem vorhanden sein. Dies kann durch fehlerhafte Software verursacht werden. Möglicherweise können Sie es mit dem DELETEBefehl über die Eingabeaufforderung entfernen .
bwDraco
9
@DragonLord: Das Dateisystem hat kein Problem mit solchen Namen. Sie können solche Dateien beispielsweise in einer POSIX-Umgebung erstellen. (Man kann aux.cähnliche Namen im Software-Quellcode finden.) Es ist nur die Win32-API, die diese "Gerätenamen" verwaltet.
Grawity
Gleiches gilt für CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 und CLOCK $ und ein paar andere - siehe en.wikipedia.org/wiki/…
Robocat
Cygwin erstellt (oder verwendet) eine Datei mit dem Namen "nul", die normalerweise in "C: \ cygwin \ dev \ nul" angezeigt wird. Dies ist die Frage, die ich alle paar Jahre bei Google getroffen habe und die ich (wieder) auf diese Frage zurückbringe.
zarchasmpgmr

Antworten:

83

Versuchen

Del \\?\C:\My\Path\NUL

in der Eingabeaufforderung.

Weitere Informationen finden Sie in diesem Microsoft Support-Artikel: Sie können eine Datei oder einen Ordner auf einem NTFS-Dateisystem-Volume nicht löschen. Dies geschieht unter "Ursache 5: Der Dateiname enthält einen reservierten Namen im Win32-Namensraum".

Mehrdad
quelle
1
Vielen Dank! Das hat funktioniert! Vielen Dank auch für den tollen Verweis auf die maßgebliche Dokumentation. Ich habe in einer Websuche etwas gefunden, das sehr ähnlich war, aber nicht funktioniert hat. Dieser Vorschlag hatte eine .anstelle der ?.
Greg Mattes
1
@ Greg: Sicher! Die Dokumentation war @ DragonLords Hilfe. :-) Und ja, setzen .statt ?tut nicht ganz dasselbe - das Fragezeichen verhindert die weitere Verarbeitung durch das Subsystem, wohingegen der Punkt "die aktuelle Maschine" bedeutet ... nicht ganz dasselbe, obwohl es definitiv ist verwirrend. :)
Mehrdad
1
Ich bin mir nicht sicher, ob es das wirklich bedeutet. Das \\.\ Präfix ist für den Gerätenamensraum , es gibt jedoch keine explizite Erwähnung, .die dieselbe Bedeutung ("aktuelles X") wie für Verzeichnisnamen hat.
Grawity
4
Als Alternative zu der obigen Lösung, wenn Ihr Arbeitsverzeichnis bereits das Verzeichnis mit der nulDatei ist, können Sie: del "\\?\%CD%\nul"Das %CD%Teil wird zum Arbeitsverzeichnis erweitert und die doppelten Anführungszeichen ( ") lassen alle auch Pfadnamen mit "ungeraden" Symbolen verarbeiten, z "\\?\C:\path,with\comma\nul".
HenrikB
1
Es schien in meiner Umgebung nicht von Powershell oder einer administrativ erhöhten Eingabeaufforderung aus effektiv zu sein, funktionierte jedoch effektiv in einem Standard-Terminal.
JustinC
13

Wenn Sie Cygwin installiert haben, möchten Sie vielleicht wissen, dass es keine Probleme mit solchen Dateien oder Ordnern gibt. Insbesondere,

rm -r /cygdrive/c/path/to/the/file/or/folder/you/want/to/delete

Eingegeben in das Cygwin-Terminal löscht die Datei oder den Ordner mit dem Namen nuloder einen Ordner, der diese enthält. Dies gilt auch für andere spezielle Dateinamen wie CON, PRN, AUX, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8.

fiktor
quelle
2
funktioniert auch mit git bash
c33s 20.09.16
Wenn Sie Git installiert haben, haben Sie den GNU- rmBefehl, sodass Sie cygwin nicht benötigen. Angenommen, Sie fügen Ihrem PATH das Verzeichnis bin der GNU-Tools hinzu, dann können Sie alle GNU-Goodies von cmd verwenden.
ICC97
8

Ich füge dies hier hinzu, weil es in den Google-Ergebnissen hoch ist und ich ein ähnliches Problem für einen Ordner mit dem Namen NUL hatte. Leider haben die obigen Korrekturen nicht geholfen. Ich habe mir auch keine Menge anderer Sachen angesehen.

Ich habe versucht , rmdir\\?\C:\My\Path\NULund rmdir\\.\C:\My\Path\NULohne Erfolg und auch versucht , mehrere Befehle bash von meiner SourceTree Installation. Keine Freude.

Am Ende habe ich DIR /X /Avon cmd verwendet, um die Kurznamen im übergeordneten Verzeichnis aufzulisten. Dies ging NUL~1für meinen NUL-Ordner zurück.

Dies wurde dann im Standardbefehl verwendet rmdir /s NUL~1und schließlich das Problem behoben.

spryce
quelle
Hmm, das ist ziemlich clever, wenn man den Kurznamen verwendet, um den speziellen Namen zu umgehen.
SamB
1

Wenn Sie Git für Windows installiert haben, gehen Sie wie folgt vor

  1. Öffnen Sie das Verzeichnis mit den Dateien, die Sie entfernen möchten
  2. Linksklick und auswählen Git Bash Here
  3. Geben Sie rm nul.jsonan der Eingabeaufforderung ein und drücken Sie die EINGABETASTE. Die Datei sollte jetzt entfernt werden.

führe Git Bash Here aus

HINWEIS: Diese Screenshots zeigen das Entfernen einer nul.topo.jsonanderen Datei, die ich mit einem einfachen Löschvorgang nicht entfernen konnte.

nach der Befehlsausführung

Geovani Martinez
quelle