¿Cómo elimino un archivo llamado "NUL" en Windows?

49

Tengo un cuadro de Windows XP (sistema de archivos NTFS) en el que encontré un archivo llamado NUL. No he podido eliminar este archivo de la forma habitual. El archivo parece ser propiedad Administratordel SYSTEMgrupo, a diferencia de cualquier otro archivo en el mismo directorio (los otros archivos son propiedad de mi ID de usuario).

¿Cómo me deshago de este archivo? ¿De dónde vino?

Greg Mattes
fuente
3
NUL es una palabra reservada del sistema; Vea este artículo de Wikipedia . Un archivo llamado NUL nunca debe existir en el sistema de archivos; Esto puede ser causado por un software defectuoso. Es posible que pueda eliminarlo utilizando el DELETEcomando mediante el símbolo del sistema.
bwDraco
99
@DragonLord: el sistema de archivos no tiene problemas con dichos nombres; por ejemplo, puede crear dichos archivos dentro de un entorno POSIX. (Se pueden encontrar aux.cnombres similares en el código fuente del software). Es puramente la API Win32 la que administra estos "nombres de dispositivos".
Grawity
Lo mismo 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 y CLOCK $ más algunos otros - ver en.wikipedia.org/wiki/…
robocat
Cygwin crea (o solía) un archivo llamado "nul", generalmente visto en "C: \ cygwin \ dev \ nul". Este es el que golpeo una vez cada pocos años, busco en Google, y me devuelven (nuevamente) a esta pregunta.
zarchasmpgmr

Respuestas:

83

Tratar

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

en el símbolo del sistema.

Consulte este artículo de soporte técnico de Microsoft para obtener más información: no puede eliminar un archivo o una carpeta en un volumen del sistema de archivos NTFS , en "Causa 5: el nombre del archivo incluye un nombre reservado en el espacio de nombres Win32".

Mehrdad
fuente
1
¡Gracias! ¡Eso funciono! Además, gracias por la gran referencia a la documentación autorizada. Encontré algo en una búsqueda web que era muy similar, pero no funcionó. Esa sugerencia tenía un .lugar de la ?.
Greg Mattes
1
@ Greg: ¡Claro! La documentación fue la ayuda de @ DragonLord. :-) Y sí, poner en .lugar de ?no hace exactamente lo mismo: el signo de interrogación impide el procesamiento posterior por parte del subsistema, mientras que el período significa "la máquina actual" ... no es exactamente lo mismo, aunque definitivamente es confuso. :)
Mehrdad
1
No estoy seguro de que realmente signifique eso. El \\.\ prefijo es para el espacio de nombres del dispositivo , pero no hay ninguna mención explícita que .tenga el mismo significado ("X actual") que para los nombres de directorio.
Grawity
44
Como alternativa a la solución anterior, si su directorio de trabajo ya es el directorio con el nularchivo, puede: del "\\?\%CD%\nul"La %CD%parte se expande al directorio de trabajo y las comillas dobles ( ") hacen que todo maneje también los nombres de ruta con símbolos "impares", por ejemplo "\\?\C:\path,with\comma\nul".
HenrikB
1
No parecía ser efectivo desde Powershell o un indicador elevado administrativamente en mi entorno, pero funcionó efectivamente en un terminal estándar.
JustinC
13

Alternativamente, si tiene instalado Cygwin , es posible que desee saber que no tiene ningún problema con dichos archivos o carpetas. Particularmente,

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

tipeado en el terminal Cygwin elimina el archivo o carpeta nombrada nulo una carpeta que lo contiene. Esto es también aplicable a otros nombres de archivos especiales tales como CON, PRN, AUX, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8.

fiktor
fuente
2
también funciona con git bash
c33s
Si ha instalado Git, entonces tiene el rmcomando GNU, por lo que no necesita cygwin. Suponiendo que agregue el directorio bin de herramientas GNU a su RUTA, puede usar todos los objetos GNU de cmd.
icc97
8

Estoy agregando esto aquí porque está alto en los resultados de Google y tuve un problema similar para una carpeta llamada NUL. Lamentablemente, las soluciones anteriores no ayudaron. Tampoco un montón de otras cosas que miré.

Lo intenté rmdir\\?\C:\My\Path\NULy rmdir\\.\C:\My\Path\NULsin éxito y también probé varios comandos usando bash desde mi instalación de SourceTree. Sin alegría.

Al final, utilicé DIR /X /Adesde cmd para enumerar los nombres cortos en el directorio principal. Esto regresó NUL~1para mi carpeta NUL.

Esto se usó en el comando estándar rmdir /s NUL~1y finalmente solucionó el problema.

spryce
fuente
Hmm, es bastante inteligente usar el nombre corto para omitir el nombre especial.
SamB
1

Si tiene instalado Git para Windows, haga lo siguiente

  1. Abra el directorio que contiene los archivos que desea eliminar.
  2. Clic izquierdo y seleccione Git Bash Here
  3. Escriba rm nul.jsonen el símbolo del sistema y presione ENTRAR, el archivo ahora debe eliminarse.

ejecuta Git Bash aquí

NOTA: Estas capturas de pantalla muestran la eliminación del archivo, nul.topo.jsonque es otro archivo que no pude eliminar con una simple eliminación.

después de la ejecución del comando

Geovani Martinez
fuente