Jak usunąć plik o nazwie „NUL” w systemie Windows?

49

Mam okno systemu Windows XP (system plików NTFS), na którym znalazłem plik o nazwie NUL. Nie udało mi się usunąć tego pliku w żaden zwykły sposób. Plik wydaje się być w posiadaniu Administratorw SYSTEMgrupie, w przeciwieństwie do jakiegokolwiek innego pliku w tym samym katalogu (pozostałe pliki są własnością mojego identyfikatora użytkownika).

Jak pozbyć się tego pliku? Skąd się to wzięło?

Greg Mattes
źródło
3
NUL to słowo zastrzeżone dla systemu; zobacz ten artykuł w Wikipedii . Plik o nazwie NUL nigdy nie powinien istnieć w systemie plików; może to być spowodowane błędnym oprogramowaniem. Możesz go usunąć za pomocą DELETEpolecenia za pomocą wiersza polecenia.
bwDraco
9
@DragonLord: System plików nie ma problemu z takimi nazwami; na przykład możesz tworzyć takie pliki w środowisku POSIX. (Można znaleźć aux.ci podobne nazwy w kodzie źródłowym oprogramowania.) To wyłącznie API Win32 zarządza tymi „nazwami urządzeń”.
grawitacja
To samo dotyczy CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 i CLOCK $ plus kilka innych - patrz pl.wikipedia.org/wiki/…
robocat
Cygwin tworzy (lub zwykł) plik o nazwie „nul”, zwykle widoczny w „C: \ cygwin \ dev \ nul”. To ten, na który trafiłem raz na kilka lat, ja Google i przywrócono mi (ponownie) to pytanie.
zarchasmpgmr

Odpowiedzi:

83

Próbować

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

w wierszu polecenia.

Szczegółowe informacje można znaleźć w tym artykule pomocy technicznej Microsoft: Nie można usunąć pliku ani folderu z woluminu systemu plików NTFS pod „Przyczyną 5: Nazwa pliku zawiera zastrzeżoną nazwę w przestrzeni nazw Win32”.

Mehrdad
źródło
1
Dzięki! To się udało! Dziękujemy również za świetne odniesienie do wiarygodnej dokumentacji. W wyszukiwaniu znalazłem coś bardzo podobnego, ale nie działającego. Sugestia, że miał .w miejscu ?.
Greg Mattes
1
@Greg: Jasne! Dokumentacja była pomocą @ DragonLord. :-) I tak, wstawianie .zamiast ?nie robi dokładnie tego samego - znak zapytania zapobiega dalszemu przetwarzaniu przez podsystem, podczas gdy kropka oznacza „obecną maszynę” ... nie całkiem to samo, chociaż zdecydowanie mylące. :)
Mehrdad
1
Nie jestem pewien, czy to faktycznie oznacza. \\.\ Prefix jest dla przestrzeni nazw urządzeń , ale tam nie ma wyraźnej wzmianki, że .ma takie samo znaczenie ( „X”) prąd jak to robi dla nazw katalogów.
grawitacja
4
Jako alternatywa dla powyższego rozwiązania, jeśli katalog roboczy jest już katalog z nulplikiem można: część jest rozszerzona do katalogu roboczego i podwójne cudzysłowy ( ) zrobić to wszystko uchwyt ścieżek również z „dziwnych” symbolami, np . del "\\?\%CD%\nul"%CD%""\\?\C:\path,with\comma\nul"
HenrikB
1
W moim środowisku nie wydawało się to skuteczne z poziomu programu PowerShell ani z podniesionego administracyjnie monitu, ale działało skutecznie w standardowym terminalu.
JustinC
13

Alternatywnie, jeśli masz zainstalowany Cygwin , możesz chcieć wiedzieć, że nie ma problemu z takimi plikami lub folderami. Szczególnie,

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

wpisany w terminalu Cygwin usuwa plik lub folder o nazwie nullub folder zawierający go. Jest to również zastosowanie do innych nazw, takich jak specjalny plik CON, PRN, AUX, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8.

fiktor
źródło
2
działa również z git bash
c33s
Jeśli zainstalowałeś Git, to masz rmpolecenie GNU, więc nie potrzebujesz cygwina. Zakładając, że dodasz katalog bin narzędzi GNU do PATH, możesz użyć wszystkich gadżetów GNU z cmd.
icc97
8

Dodam to tutaj, ponieważ jest wysoko w wynikach Google i miałem podobny problem z folderem o nazwie NUL. Niestety powyższe poprawki nie pomogły. Nie oglądałem też wielu innych rzeczy.

Próbowałem rmdir\\?\C:\My\Path\NULi rmdir\\.\C:\My\Path\NULbez powodzenia, a także wypróbowałem kilka poleceń za pomocą bash z mojej instalacji SourceTree. Brak przyjemności.

Na koniec użyłem DIR /X /Az cmd do wyświetlenia krótkich nazw w katalogu nadrzędnym. To zwróciło NUL~1dla mojego folderu NUL.

Zostało to następnie użyte w standardowym poleceniu rmdir /s NUL~1i ostatecznie rozwiązało problem.

sprice
źródło
Hmm, to całkiem sprytne, używając krótkiej nazwy, aby ominąć nazwę specjalną.
SamB
1

Jeśli masz zainstalowany Git dla Windows, wykonaj następujące czynności

  1. Otwórz katalog zawierający pliki, które chcesz usunąć
  2. Kliknij lewym przyciskiem i wybierz Git Bash Here
  3. Wpisz rm nul.jsonw wierszu polecenia i naciśnij klawisz ENTER, plik powinien zostać teraz usunięty.

uruchom Git Bash tutaj

UWAGA: Te zrzuty ekranu pokazują usunięcie pliku, nul.topo.jsonktóry jest innym plikiem, którego nie mogłem usunąć zwykłym usunięciem.

po wykonaniu polecenia

Geovani Martinez
źródło