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 une commande, rd /q /s "C:\a.\"
mais si j'appelle win API RemoveDirectory
, elle revient ERROR_FILE_NOT_FOUND
.
Et je me demande simplement 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 cette rd /q /s
commande appelle-t-elle?
Réponses:
Voici une solution à ce problème :
rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."
la source
rd
.CMD.exe
en mode administrateur aussi si cela ne fonctionne pas dans l'invite de commande non élevéeSolution: lorsque vous appelez RemoveDirectory, assurez-vous que vous préfixez le chemin avec la chaîne "
\\?\
".Explication: Cela a tout à voir avec le point. Selon MSDN, il existe certains cas où vous ne pourrez peut-être 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 du méthodes normales dans l'Explorateur Windows).
(Source: http://support.microsoft.com/?kbid=320081 )
la source
rd "\\?\C:\Users\ahmed\Desktop\buggy."
rd
dans pwsh est un aliasremove-item
dont ne prend pas en charge `\\? \`.{IncrementalNumber}.
Je suis tombé sur ce problème en essayant de faire du traitement du langage naturel sur un ensemble de données (chaque fichier de l'ensemble de données est nommé ), et j'étais très confus quant à la raison pour laquelle mes scripts de traitement de données échouaient. Cela a maintenant du sens, mais il semble que le comportement soit si inattendu qu'il pourrait avoir des ramifications de sécurité en raison de la mauvaise gestion des noms de fichiers par les applications se terminant par un espace ou un point.J'ai posté ceci sur SU et j'ai décidé de le publier 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.
J'ai moi-même installé WinRaR, alors j'ai décidé de 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 vous soucier de les archiver! À votre santé!
la source
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 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" )
la source
Si vous avez installé git (vous pouvez obtenir ir à partir d' ici ), c'est aussi simple que:
rm -rf Foldername./
la source
rm: cannot remove ‘.bin’: Directory not empty
-rf
partie doit s'occuper du contenu du dossier.J'ai utilisé " WinRar " Un simple processeur RAR, ZIP. Vous pouvez utiliser n'importe quel type 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 indiquez le nouveau nom.
la source
Essayez d'utiliser le programme de déverrouillage pour supprimer les fichiers et les dossiers que vous ne pouvez pas supprimer normalement.
la source
Utilisez la commande bash rm d'Ubuntu sous Windows 10
la source
rm: cannot remove ‘.bin’: Directory not empty
si vous souhaitez conserver les fichiers, il existe également des options dans bash.
vous aurez besoin du sous-système Windows pour le package Linux (j'ai installé Ubuntu)
pour conserver les fichiers. ouvrez une invite de commande et accédez à l'emplacement du fichier ou du dossier.
maintenant tapez "
bash
"cela ouvrira bash dans l'invite. maintenant entrez
mv '[folder or file you want to move]' '[new name (can include path)]'
(il y a plus à mv donc si vous voulez lire toutes ses options, utilisez 'man mv' cela ouvrira sa page de manuel (puis utilisez q pour revenir à bash))la commande mv est l'abréviation de move, mais son a une fonction secondaire de renommer les choses.
également dans bash, utilisez des "guillemets simples" et non un "guillemet double" normal, car bash s'attend à des "guillemets simples".
voici un exemple. Supposons que votre dossier est nommé "
data 1.
" situé dansc:\users
(le chemin complet vers le dossier d'erreur est doncc:\users\data 1.
1. ouvrez l'invite de commande en utilisant n'importe quelle méthode
2. entrez
cd c:\users
3. maintenant tapez
bash
ce charge bash dans le dossier dans lequel vous étiez auparavant4. tapez enfin
mv 'data 1.' 'data 1'
5. le dossier est maintenant accessible et vous pouvez choisir de le supprimer.
la source