web-dev-qa-db-fra.com

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

J'ai reçu des dossiers créés par des logiciels malveillants dont le nom se terminait 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 win API RemoveDirectory , il renvoie ERROR_FILE_NOT_FOUND.

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

Je teste sur mon propre système Windows XP SP3 comme celui-ci

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

quelle (s) API système Windows qui rd /q /s appel de commande?

76
jerry.liu

Voici une solution à ce problème :

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

Solution: Lorsque vous appelez RemoveDirectory, assurez-vous de préfixer le chemin d'accès 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, en particulier lorsque le nom de fichier n'est pas valide dans l'espace de noms Win32 (c'est pourquoi vous ne pouvez pas ouvrir le fichier à l'aide de la méthodes normales dans l'Explorateur Windows).

Vous ne pourrez peut-être pas supprimer un fichier si le nom de fichier contient un nom non valide (par exemple, le nom de fichier a un espace de fin ou une période de fin ou le nom de 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 opérer sur ces fichiers, par exemple:
del "\\?\c:\path_to_file_that contains a trailing space.txt"
La cause de ce problème est similaire à la cause 4. Toutefois, si vous utilisez la syntaxe Win32 typique pour ouvrir un fichier qui contient des espaces ou des périodes de fin dans son nom, les espaces ou périodes de fin sont supprimés avant le fichier réel. est ouvert. Par conséquent, si vous avez deux fichiers dans le même dossier nommé "AFile.txt" et "AFile.txt" (notez l'espace après le nom du fichier), si vous essayez d'ouvrir le deuxième fichier à l'aide d'appels Win32 standard, vous ouvrez le le premier fichier à la place. De même, si vous avez un fichier dont le nom est simplement "" (un espace) et que vous essayez de l'ouvrir en utilisant des appels Win32 standard, vous ouvrez le dossier parent du fichier à la place. Dans ce cas, si vous essayez de modifier les paramètres de sécurité de ces fichiers, vous ne pourrez peut-être pas le faire ou vous pourrez modifier de manière inattendue les paramètres de différents fichiers. Si ce problème se produit, vous pensez peut-être que vous avez l'autorisation sur un fichier qui a réellement une liste de contrôle d'accès restrictive.

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

55
Cody Gray

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

  1. Installer WinRAR
  2. Suivez la procédure étape par étape à partir des images:
  3. enter image description here
  4. enter image description here
  5. enter image description here
  6. enter image description here

J'avais moi-même installé WinRaR, j'ai donc décidé de démontrer la solution de contournement.
Cette solution de contournement est également possible en utilisant 7Zip.

Une autre chose que je dois mentionner est que, comme il semble que le problème est causé par l'utilisation de l'Explorateur Windows et tout autre navigateur de fichiers (comme le navigateur de fichiers winrar lui-même, les explorateurs ftp, etc.) traitera ces fichiers comme normaux.
Vous pouvez essayer d'utiliser n'importe quel navigateur de fichiers et simplement supprimer ces fichiers sans prendre la peine de les archiver! À votre santé!

39
AmirHossein

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

Essaye ça:

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

Et vous pouvez essayer d'explorer le dossier par 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"
)
7
neorobin

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

  1. Accédez à l'emplacement où se trouve le dossier problématique.
  2. Menu contextuel (bouton droit de la souris)> Git Bash Here.
  3. rm -rf Foldername./
4
Laurynas Lazauskas

J'ai utilisé " WinRar " Un simple processeur RAR, Zip. Vous pouvez utiliser n'importe quelle sorte d'éditeur de nom de fichier. Ouvrez simplement le répertoire où se trouve votre fichier dans WinRar et sélectionnez renommer après avoir cliqué avec le bouton droit sur le fichier/dossier que vous souhaitez renommer et remplissez le nouveau nom.

3
Aryan

Essayez d'utiliser le programme nlocker pour supprimer les fichiers et dossiers que vous ne pouvez pas supprimer normalement.

2
RyuuGan