49 votes

Utilisation de caractères génériques avec la commande rmdir ou rd

Supposons qu'il y ait des dossiers dans la base de données D: conduire :

D:\Air
D:\Abonden
D:\All
D:\Whatever

Je souhaite supprimer tous les dossiers commençant par "A" (y compris tous les sous-dossiers et fichiers). J'ai essayé cette commande :

rmdir D:\A* /s /q

J'obtiens cependant une erreur :(

La syntaxe du nom de fichier, du nom de répertoire ou de l'étiquette de volume est incorrecte.

Les del La commande fonctionne avec * mais je dois également supprimer des dossiers.
Existe-t-il un moyen d'y parvenir par l'intermédiaire de l'outil rmdir commande ?

38voto

Fazer87 Points 11931
cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

Il s'agit cependant d'un test :

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

Cela permet d'envoyer les commandes à exécuter dans l'invite de commande et de voir ce qui se passe.

Gardez à l'esprit que la recherche portera également sur les sous-dossiers tels que " C:\temp\jjj\aaa "et supprimerait le dossier aaa. Si vous voulez qu'il ne regarde que les dossiers de premier niveau " C:\temp\aaa ", puis retirez le "/s" de la commande.

L'élément clé est le A*, où vous devez entrer votre chaîne de recherche. Les caractères génériques tels que aaa* , aaa* y *aaa* si vous le souhaitez.

31voto

William Whyte Points 1036

Suppression de dossiers à l'aide de caractères génériques

Les rmdir / rd ne permet pas à elle seule de prendre en charge caractères génériques (c'est-à-dire, * y ? ). Vous pouvez contourner cette limitation en l'enveloppant dans un fichier for boucle.

Exemple d'utilisation

for /d %G in ("X:\A*") do rd /s /q "%~G"

Note Lorsque vous supprimez des fichiers et des dossiers, vous pouvez remplacer l'option rd avec la commande echo d'abord. Vous pouvez ainsi vous assurer que tout ce qui ne doit pas être supprimé l'est effectivement.

Modèles multiples

Pour supprimer plusieurs dossiers correspondant à des modèles différents, la syntaxe n'est pas très différente. Comme @dbenham l'a correctement souligné, une commande d'une ligne suffit. Vous pouvez également spécifier des chemins d'accès différents :

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

Bonus - Vérifier l'existence du dossier

Si vous souhaitez vérifier si des dossiers spécifiques existent, vous pouvez utiliser la commande suivante :

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

Pour en savoir plus

20voto

JJS Points 540

Comment se fait-il que personne n'ait encore parlé de forfiles à l'OP ?!

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/P is pathname - where the searching starts
/M is search mask, looking for files that start with A
/C is the command to execute
/S is recursive subfolders (didn't include here, because op didn't ask)

17voto

Sam B Points 407

La réponse de adn31415 est correcte mais ne fonctionne pas si vous mettez ceci dans un batch ou cmd script. Je me suis cassé la tête pendant des heures jusqu'à ce que je comprenne que c'est ainsi qu'il faut l'utiliser.

Dans la fenêtre de commande DOS :

for /d %G in ("X:\A*") do rd /s /q "%~G"

Dans Batch ou cmd script :

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

Si vous souhaitez l'insérer dans un fichier ".bat" ou ".cmd", vous devez doubler les caractères "%".

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X