Как удалить файл с именем «NUL» в Windows?

49

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

Как мне избавиться от этого файла? Откуда это?

Грег Маттес
источник
3
NUL - системное зарезервированное слово; см. эту статью в Википедии . Файл с именем NUL никогда не должен существовать в файловой системе; это может быть вызвано ошибкой программного обеспечения. Вы можете удалить его, используя DELETEкоманду с помощью командной строки.
bwDraco
9
@DragonLord: у файловой системы нет проблем с такими именами; например, вы можете создавать такие файлы в среде POSIX. ( aux.cПодобные имена можно найти в исходном коде программного обеспечения.) Этим «именам устройств» управляет исключительно API Win32.
Гравитация
То же самое относится к 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».

Mehrdad
источник
1
Спасибо! Это сработало! Также спасибо за отличную ссылку на авторитетную документацию. Я нашел что-то в веб-поиске, которое было очень похоже, но не работало. Это предложение имело .место ?.
Грег Мэттес
1
@ Грег: Конечно! Документация была помощью @ DragonLord. :-) И да, ставить .вместо ?не совсем то же самое - знак вопроса препятствует дальнейшей обработке подсистемой, тогда как точка означает «текущая машина» ... не совсем то же самое, хотя это определенно запутанный. :)
Мердад
1
Я не уверен, что это на самом деле означает это. \\.\ Префикс не является для пространства имен устройств , но нет явного упоминания , что .имеет такое же значение ( «ток X») , как это делает для имен каталогов.
Гравитация
4
В качестве альтернативы выше решения , если ваш рабочий каталог уже в каталоге с nulфайлом, вы можете: часть расширяются в рабочем каталог и двойные кавычки ( ) сделать это все ручки и имена маршрута с «нечетными» символами, например . del "\\?\%CD%\nul"%CD%""\\?\C:\path,with\comma\nul"
HenrikB
1
Похоже, он не был эффективным в PowerShell или административно-повышенном запросе в моей среде, но эффективно работал в стандартном терминале.
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.

fiktor
источник
2
также работает с git bash
c33s 20.09.16
Если вы установили Git, то у вас есть команда GNU, rmпоэтому вам не нужен Cygwin. Предполагая, что вы добавили каталог bin инструментов GNU в вашу переменную PATH, вы можете использовать все возможности GNU из cmd.
icc97
8

Я добавляю это здесь, потому что это высоко в результатах Google, и у меня была похожая проблема для папки с именем NUL. К сожалению, вышеуказанные исправления не помогли. Также не было тонны других вещей, на которые я смотрел.

Я попробовал rmdir\\?\C:\My\Path\NULи rmdir\\.\C:\My\Path\NULбез какого - либо успеха , а также пытался несколько команд с помощью Баша из моей установки SourceTree. Нет радости

В конце я использовал DIR /X /Aиз cmd список коротких имен в родительском каталоге. Это вернулось NUL~1для моей папки NUL.

Затем это использовалось в стандартной команде rmdir /s NUL~1и, наконец, решило проблему.

spryce
источник
Хм, довольно умно использовать короткое имя, чтобы обойти специальное имя.
SamB
1

Если у вас установлен Git для Windows, сделайте следующее

  1. Откройте каталог, содержащий файлы, которые вы хотите удалить
  2. Щелкните левой кнопкой мыши и выберите Git Bash Here
  3. Введите rm nul.jsonв командной строке и нажмите клавишу ВВОД, теперь файл должен быть удален.

запустить Git Bash Здесь

ПРИМЕЧАНИЕ. Эти снимки экрана показывают удаление файла, nul.topo.jsonкоторый является другим файлом, который я не мог удалить простым удалением.

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

Джовани Мартинес
источник