Como faço para remover um arquivo chamado "NUL" no Windows?

49

Eu tenho uma caixa do Windows XP (sistema de arquivos NTFS) na qual encontrei um arquivo chamado NUL. Não consegui remover este arquivo da maneira usual. O arquivo parece pertencer Administratorao SYSTEMgrupo, diferente de qualquer outro arquivo no mesmo diretório (os outros arquivos pertencem ao meu ID de usuário).

Como faço para me livrar desse arquivo? De onde veio?

Greg Mattes
fonte
3
NUL é uma palavra reservada do sistema; veja este artigo da Wikipedia . Um arquivo chamado NUL nunca deve existir no sistema de arquivos; isso pode ser causado por software com erros. Você pode removê-lo usando o DELETEcomando usando o Prompt de Comando.
BwDraco 11/05
9
@DragonLord: O sistema de arquivos não tem problemas com esses nomes; por exemplo, você pode criar esses arquivos em um ambiente POSIX. (É possível encontrar aux.cnomes semelhantes no código-fonte do software.) É apenas a API do Win32 que gerencia esses "nomes de dispositivos".
grawity
O mesmo se aplica a CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 e RELÓGIO. $ mais alguns outros - consulte en.wikipedia.org/wiki/…
robocat 30/04/2015
Cygwin cria (ou costumava) um arquivo chamado "nul", geralmente visto em "C: \ cygwin \ dev \ nul". É o que eu acerto uma vez a cada poucos anos, no Google, e sou trazido de volta (de novo) a essa pergunta.
Zarchasmpgmr

Respostas:

83

Experimentar

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

no prompt de comando.

Consulte este artigo de suporte da Microsoft para obter detalhes: Você não pode excluir um arquivo ou uma pasta em um volume do sistema de arquivos NTFS , em "Causa 5: O nome do arquivo inclui um nome reservado no espaço para nome do Win32".

Mehrdad
fonte
11
Obrigado! Isso funcionou! Além disso, obrigado pela excelente referência à documentação autorizada. Encontrei algo em uma pesquisa na web que era muito semelhante, mas não funcionou. Essa sugestão .substituiu o ?.
Greg Mattes
11
@ Greg: Claro! A documentação foi a ajuda de @ DragonLord. :-) E sim, colocar em .vez de ?não faz exatamente a mesma coisa - o ponto de interrogação impede o processamento adicional pelo subsistema, enquanto o período significa "a máquina atual" ... não exatamente a mesma coisa, embora seja definitivamente confuso. :)
Mehrdad
11
Não tenho certeza se isso realmente significa isso. O \\.\ prefixo é para o espaço de nome do dispositivo , mas não há menção explícita que .tenha o mesmo significado ("X atual") do nome dos diretórios.
grawity
4
Como alternativa à solução acima, se o seu diretório de trabalho já estiver no diretório com o nularquivo, você pode: del "\\?\%CD%\nul"A %CD%peça é expandida para o diretório de trabalho e as aspas duplas ( ") fazem com que tudo lide também com nomes de caminho com símbolos "ímpares", por exemplo "\\?\C:\path,with\comma\nul".
HenrikB
11
Não parecia ser eficaz no PowerShell ou em um prompt administrativo elevado no meu ambiente, mas funcionava efetivamente em um terminal padrão.
JustinC
13

Como alternativa, se você tiver o Cygwin instalado, convém saber que ele não tem problemas com esses arquivos ou pastas. Particularmente,

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

digitado no terminal Cygwin exclui o arquivo ou pasta nomeada nulou uma pasta que o contém. Isto também se aplica a outros nomes de arquivos especiais, como CON, PRN, AUX, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8.

fiktor
fonte
2
também trabalha com o bash git
c33s
Se você instalou o Git, terá o rmcomando GNU para não precisar do cygwin. Supondo que você adicione o diretório bin do GNU tools ao seu PATH, você pode usar todos os itens do GNU do cmd.
icc97
8

Estou adicionando isso aqui, porque é alto nos resultados do google e tive um problema semelhante para uma pasta chamada NUL. Infelizmente, as correções acima não ajudaram. Nem uma tonelada de outras coisas que eu olhei.

Eu tentei rmdir\\?\C:\My\Path\NULe rmdir\\.\C:\My\Path\NULsem sucesso e também tentei vários comandos usando o bash da minha instalação do SourceTree. Sem alegria

No final, usei DIR /X /Ado cmd para listar os nomes abreviados no diretório pai. Isso retornou NUL~1para minha pasta NUL.

Isso foi usado no comando padrão rmdir /s NUL~1e finalmente corrigido o problema.

spryce
fonte
Hmm, é muito inteligente usar o nome abreviado para ignorar o nome especial.
Samb
1

Se você possui o Git for Windows Installed, faça o seguinte

  1. Abra o diretório que contém os arquivos que você deseja remover
  2. Clique com o botão esquerdo e selecione Git Bash Here
  3. Digite rm nul.jsonno prompt de comando e pressione ENTER; o arquivo agora deve ser removido.

execute o Git Bash aqui

NOTA: Essas capturas de tela mostram a remoção do arquivo, nul.topo.jsonque é outro arquivo que não foi possível remover com uma simples exclusão.

após a execução do comando

Geovani Martinez
fonte