105 votes

Comment supprimer un dossier dont le nom se termine par un point (".")?

J'ai des dossiers créés par des logiciels malveillants dont le nom se termine par un point comme C:\a.\ ou C:\b.\, etc.

J'ai trouvé une solution qui peut supprimer un tel dossier avec la commande rd /q /s "C:\a.\", mais si j'appelle l'API Windows RemoveDirectory, cela renvoie ERROR_FILE_NOT_FOUND.

Et je me demande juste comment écrire une fonction pour supprimer un tel répertoire, merci

J'ai testé sur mon propre système Windows XP SP3 comme ceci

créez un dossier C:\>mkdir a..\\\ et je ne peux pas double-cliquer pour accéder à ce dossier. et je peux le supprimer avec la commande rd /q /s "C:\a.\"

quel(s) API système Windows que la commande rd /q /s appelle-t-elle ?

189voto

Skilldrick Points 33002

Voici une solution à ce problème:

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."

83voto

Cody Gray Points 102261

Solution : Lorsque vous appelez RemoveDirectory, assurez-vous de préfixer le chemin avec la chaîne "\\?\".

Explication : Cela a tout à voir avec le point. Selon MSDN, il existe certains cas où vous ne pouvez pas supprimer un fichier ou un dossier sur un volume NTFS, notamment lorsque le nom de fichier est invalide dans l'espace de noms Win32 (c'est pourquoi vous ne pouvez pas ouvrir le fichier en utilisant les méthodes normales dans l'Explorateur Windows).

Vous ne pourrez peut-être pas supprimer un fichier si le nom du fichier inclut un nom invalide (par exemple, le nom du fichier se termine par un espace ou un point final ou le nom du fichier est composé uniquement d'un espace). Pour résoudre ce problème, utilisez un outil qui utilise la syntaxe interne appropriée pour supprimer le fichier. Vous pouvez utiliser la syntaxe "\\?\" avec certains outils pour travailler sur ces fichiers, par exemple :

del "\\?\c:\chemin_vers_le_fichier_contenant un espace final.txt "

La cause de ce problème est similaire à la Cause 4. Cependant, si vous utilisez une syntaxe Win32 classique pour ouvrir un fichier qui a des espaces finaux ou des points finaux dans son nom, les espaces ou points finaux sont supprimés avant que le fichier réel ne soit ouvert. Par conséquent, si vous avez deux fichiers dans le même dossier nommés "UnFichier.txt" et "UnFichier.txt " (notez l'espace après le nom de fichier), si vous essayez d'ouvrir le deuxième fichier en utilisant des appels Win32 standard, vous ouvrez le premier fichier à la place. De même, si vous avez un fichier dont le nom est juste " " (un caractère d'espace) et que vous essayez de l'ouvrir en utilisant des appels Win32 classiques, vous ouvrez le dossier parent du fichier à la place. Dans cette situation, si vous essayez de modifier les paramètres de sécurité sur ces fichiers, vous ne pourrez peut-être pas le faire ou vous pourriez modifier inopinément les paramètres sur des fichiers différents. Si ce comportement se produit, vous pourriez penser que vous avez l'autorisation sur un fichier qui a en réalité une ACL restrictive.

(Source : http://support.microsoft.com/?kbid=320081)

56voto

TechJS Points 1628

J'ai posté ceci sur SU et j'ai décidé de le poster ici aussi. C'est la manière la plus simple, rapide et facile pour y parvenir. Je ris maintenant de voir à quel point c'est simple.

  1. Installez WinRAR
  2. Suivez la procédure étape par étape à partir des images:
  3. insérer la description de l'image ici
  4. insérer la description de l'image ici
  5. insérer la description de l'image ici
  6. insérer la description de l'image ici

J'avais WinRAR installé donc j'ai décidé de montrer le contournement avec celui-ci.
Il est également possible d'utiliser 7zip pour ce contournement.

Une autre chose que je devrais mentionner est que, apparemment, le problème est causé par l'utilisation de l'explorateur Windows et tout autre navigateur de fichiers (comme l'explorateur de fichiers WinRAR lui-même, les explorateurs FTP, etc.) traiteront ces fichiers comme normaux.
Vous pourriez essayer d'utiliser n'importe quel navigateur de fichiers et simplement supprimer ces fichiers sans vous soucier de les archiver !
Santé !

16voto

Laurynas Lazauskas Points 1869

Si vous avez git installé (vous pouvez l'obtenir ici), alors c'est aussi simple que :

  1. Naviguez dans l'Explorateur de fichiers jusqu'à l'emplacement où se trouve le dossier problématique.
  2. Menu contextuel (clic droit) > Git Bash ici.
  3. rm -rf NomDossier./

8voto

neorobin Points 43

Lorsque vous voyez que le nom est "a.", mais que le nom réel est "a.."

Essayez ceci :

rd /q /s "C:\a..\"

Et vous pouvez essayer d'explorer le dossier avec ce code :

for /f "tokens=3 delims=<>" %%a in ('dir /ad /x "C:\*" ^| findstr " a\.\.$"') do (
  for /f "tokens=1" %%b in ("%%a") do start "" "%%~fb"
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X