Comment supprimer un fichier nommé «NUL» sous Windows?

49

J'ai un ordinateur Windows XP (système de fichiers NTFS) sur lequel j'ai trouvé un fichier nommé NUL. Je n'ai pas été en mesure de supprimer ce fichier de manière habituelle. Le fichier semble appartenir Administratorau SYSTEMgroupe, contrairement à tout autre fichier du même répertoire (les autres fichiers sont la propriété de mon identifiant utilisateur).

Comment puis-je me débarrasser de ce fichier? D'où vient-il?

Greg Mattes
la source
3
NUL est un mot réservé du système; voir cet article de Wikipedia . Un fichier nommé NUL ne devrait jamais exister sur le système de fichiers; cela peut être causé par un logiciel buggy. Vous pourrez peut-être le supprimer en utilisant la DELETEcommande en utilisant Invite de commandes.
bwDraco
9
@DragonLord: le système de fichiers n'a pas de problème avec de tels noms; Par exemple, vous pouvez créer de tels fichiers dans un environnement POSIX. (On peut trouver aux.cdes noms similaires dans le code source du logiciel.) C'est purement l'API Win32 qui gère ces "noms de périphériques".
Grawity
Il en va de même pour CON, PRN, AUX, NUL, COM1, COM2, COM4, ​​COM5, COM6, COM7, COM7, COM8, COM9, LPT1, LPT2, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 et CLOCK. $ plus quelques autres - voir en.wikipedia.org/wiki/…
robocat
Cygwin crée (ou avait l'habitude de) un fichier appelé "nul", généralement présent dans "C: \ cygwin \ dev \ nul". C’est celui que je frappe une fois tous les deux ou trois ans, je Google, et je suis ramené (encore) à cette question.
zarchasmpgmr

Réponses:

83

Essayer

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

dans l'invite de commande.

Consultez cet article du support technique Microsoft pour plus de détails: Vous ne pouvez pas supprimer un fichier ou un dossier sur un volume de système de fichiers NTFS , sous "Cause 5: le nom du fichier inclut un nom réservé dans l'espace de noms Win32".

Mehrdad
la source
1
Merci! Ça a marché! Merci également pour l'excellente référence à la documentation faisant autorité. J'ai trouvé quelque chose de très similaire dans une recherche Web, mais qui n'a pas fonctionné. Cette suggestion a eu .lieu à la place du ?.
Greg Mattes
1
@Greg: Bien sûr! La documentation était l'aide de @ DragonLord. :-) Et oui, mettre .au lieu de ?ne fait pas tout à fait la même chose - le point d'interrogation empêche tout traitement ultérieur par le sous-système, alors que le point signifie "la machine actuelle" ... pas tout à fait la même chose, bien que ce soit définitivement déroutant. :)
Mehrdad
1
Je ne suis pas sûr que cela veuille dire ça. Le \\.\ préfixe est pour l'espace de noms de périphérique , mais il n'y a aucune mention explicite qui .a la même signification ("X actuel") que pour les noms de répertoire.
Grawity
4
Au lieu de la solution ci-dessus, si votre répertoire de travail est déjà le répertoire avec le nulfichier, vous pouvez: del "\\?\%CD%\nul"La %CD%pièce est développée dans le répertoire de travail et les guillemets doubles ( ") permettent de gérer tous les chemins avec des symboles "impairs", par exemple "\\?\C:\path,with\comma\nul".
HenrikB
1
Cela ne semblait pas être efficace de la part de powershell ou d'une invite élevée sur le plan administratif dans mon environnement, mais fonctionnait efficacement dans un terminal standard.
JustinC
13

Si vous avez installé Cygwin , vous pouvez également savoir qu’il n’ya aucun problème avec de tels fichiers ou dossiers. Particulièrement,

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

saisi dans le terminal Cygwin supprime le fichier ou le dossier nommé nulou un dossier le contenant. Ceci est également applicable à d' autres noms de fichiers spéciaux tels que CON, PRN, AUX, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8.

Fiktor
la source
2
fonctionne également avec git bash
c33s
Si vous avez installé Git, vous avez la rmcommande GNU , vous n'avez donc pas besoin de cygwin. En supposant que vous ajoutiez le répertoire bin des outils GNU à votre PATH, vous pouvez utiliser tous les goodies GNU de cmd.
icc97
8

J'ajoute ceci ici car il est élevé dans les résultats de Google et j'ai eu un problème similaire pour un dossier nommé NUL. Malheureusement, les corrections ci-dessus n'ont pas aidé. Aucune tonne d'autres choses que j'ai regardées.

J'ai essayé rmdir\\?\C:\My\Path\NULet rmdir\\.\C:\My\Path\NULsans aucun succès et j'ai également essayé plusieurs commandes en utilisant bash depuis mon installation de SourceTree. Pas de joie.

En fin de compte, j'ai utilisé à DIR /X /Apartir de cmd pour lister les noms abrégés dans le répertoire parent. Ceci est revenu NUL~1pour mon dossier NUL.

Cela a ensuite été utilisé dans la commande standard rmdir /s NUL~1et a finalement résolu le problème.

spryce
la source
Hmm, c'est assez intelligent d'utiliser le nom abrégé pour contourner le nom spécial.
SamB
1

Si vous avez installé Git pour Windows, procédez comme suit:

  1. Ouvrez le répertoire contenant les fichiers que vous souhaitez supprimer
  2. Clic gauche et sélectionnez Git Bash Here
  3. Tapez rm nul.jsonà l'invite de commande et appuyez sur Entrée, le fichier doit maintenant être supprimé.

lancez Git Bash ici

REMARQUE: Ces captures d'écran montrent la suppression du fichier, nul.topo.jsonqui est un autre fichier que je ne pouvais pas supprimer avec une simple suppression.

après exécution de la commande

Geovani Martinez
la source