Як видалити файл з назвою "NUL" в Windows?


49

У мене є вікно Windows XP (файлова система NTFS), в якому я знайшов файл з назвою NUL. Я не зміг видалити цей файл звичайним способом. Файл , як видається, належить Administratorв SYSTEMгрупі, в відміну від будь-якого іншого файлу в тому ж каталозі (інші файли належать моїм ідентифікатором користувача).

Як я можу позбутися цього файлу? Звідки воно взялося?


3
NUL - системне зарезервоване слово; дивіться цю статтю у Вікіпедії . Файл з іменем NUL ніколи не повинен існувати у файловій системі; це може бути викликано помилковим програмним забезпеченням. Ви можете видалити його за допомогою DELETEкоманди за допомогою командного рядка.
bwDraco

9
@DragonLord: файлова система не має проблем з такими іменами; наприклад, ви можете створювати такі файли в середовищі POSIX. (Можна знайти aux.cі подібні імена у вихідному коді програмного забезпечення.) Ці «імена пристроїв» керують саме програмою Win32 API.
grawity

Те саме стосується CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 та CLOCK $ плюс кілька інших - дивіться en.wikipedia.org/wiki/…
robocat

Cygwin створює (або використовував) файл під назвою "nul", зазвичай його бачать у "C: \ cygwin \ dev \ nul". Це те, що я потрапляю раз на кілька років, я Google, і мене знову (знову) повертають до цього питання.
zarchasmpgmr

Відповіді:


83

Спробуйте

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

у командному рядку.

Докладні відомості див. У цій статті підтримки Microsoft: Ви не можете видалити файл або папку з обсягу файлової системи NTFS у розділі "Причина 5: Ім'я файлу містить зарезервоване ім'я у просторі імен Win32".


1
Дякую! Це спрацювало! Також дякую за велику посилання на авторитетну документацію. Я знайшов щось у веб-пошуку, яке було дуже схожим, але не працювало. Ця пропозиція мала місце .на місці ?.
Грег Маттес

1
@Greg: Звичайно! Документація була на допомогу @ DragonLord. :-) І так, .замість того , щоб замість того, щоб ?зробити це не те саме, - знак питання перешкоджає подальшій обробці підсистемою, тоді як період означає "поточна машина" ... не зовсім те саме, хоча, безумовно, заплутаний. :)
Мехрдад

1
Я не впевнений, що насправді це означає. \\.\ Префікс не є для простору імен пристроїв , але немає явного згадування , що .має таке ж значення ( «ток X») , як це робить для імен каталогів.
grawity

4
В якості альтернативи вище рішення , якщо ваш робочий каталог вже в каталозі з nulфайлом, ви можете: частина розширюються в робочому каталог і подвійні лапки ( ) зробити це все ручки і імена маршруту з «непарними» символами, наприклад . del "\\?\%CD%\nul"%CD%""\\?\C:\path,with\comma\nul"
HenrikB

1
Здавалося, це не було ефективним у зв'язку з повноваженнями або адміністративно підвищеним підказом в моєму середовищі, але ефективно працював у стандартному терміналі.
JustinC

13

Крім того, якщо у вас встановлений Cygwin , ви можете знати, що він не має проблем з такими файлами чи папками. Зокрема,

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

введений у терміналі Cygwin видаляє файл або папку з іменем nulабо папку, що містить її. Це також може бути застосовано до інших спеціальних файлових імен , таким як CON, PRN, AUX, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8.


2
також працює з git bash
c33s

Якщо ви встановили Git, ви отримали команду GNU, rmтому cygwin вам не потрібен. Якщо припустити, що ви додасте в каталог PinH каталог бін інструментів GNU, ви можете використовувати всі смаколики GNU з cmd.
icc97

8

Я додаю це сюди, тому що це високо в результатах google, і у мене була аналогічна проблема для папки під назвою NUL. На жаль, наведені вище виправлення не допомогли. Ані тонни інших речей, які я дивився, не робив.

Я намагався rmdir\\?\C:\My\Path\NULі rmdir\\.\C:\My\Path\NULбез жодного успіху, а також спробував кілька команд, використовуючи bash з моєї установки SourceTree. Ніякої радості.

Зрештою, я використав DIR /X /Aз cmd перелік коротких імен у батьківському каталозі. Це повернулося NUL~1до моєї папки NUL.

Потім це було використано у стандартній команді rmdir /s NUL~1та остаточно виправлено проблему.


Гм, це досить розумно, використовуючи коротке ім'я, щоб обійти спеціальне ім’я.
СамБ

1

Якщо у вас встановлено Git для Windows, зробіть наступне

  1. Відкрийте каталог, що містить файли, які потрібно видалити
  2. Клацніть лівою кнопкою миші та виберіть Git Bash Here
  3. Введіть rm nul.jsonу командному рядку та натисніть ENTER, файл тепер слід видалити.

запустіть тут Git Bash

ПРИМІТКА. Ці скріншоти показують видалення файлу, nul.topo.jsonякий є іншим файлом, який я не міг видалити простим видаленням.

після виконання команди

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.