web-dev-qa-db-fra.com

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

Disons qu'il y a des dossiers dans le lecteur D::

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

Je reçois une erreur, cependant :(

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

La commande del fonctionne avec *, mais je dois également supprimer des dossiers.
Y at-il un moyen d’y parvenir via la commande rmdir?

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

Utilisez ceci pour tester si:

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

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

Gardez à l’esprit que cela recherchera également des sous-dossiers tels que «C:\temp\jjj\aaa» et effacera le dossier aaa. Si vous souhaitez simplement regarder les dossiers de niveau supérieur "C:\temp\aaa", supprimez le "/s" de la commande.

La clé de ceci est le A *, où vous mettriez votre chaîne de recherche. Cela acceptera les caractères génériques tels que aaa*, aaa* et *aaa* si vous le souhaitez.

31
Fazer87

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

La commande rmdir/rd seule ne prend pas en charge les caractères génériques (c'est-à-dire, * et ?). Vous pouvez contourner cette limitation en l'enveloppant dans une boucle for.

Exemple d'utilisation

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

Remarque Lorsque vous supprimez des fichiers et des dossiers, vous souhaiterez peut-être remplacer la commande rd par echo en premier. De cette façon, vous pouvez vous assurer que tout ce qui ne devrait pas être supprimé le ferait.

Plusieurs modèles

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

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

Bonus - Vérification de l'existence d'un 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.

Lectures complémentaires

19
and31415

Comment personne n'a encore parlé à l'OP de forfiles?!

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

/P est le nom du chemin - où la recherche commence 
/M est le masque de recherche; rechercher les fichiers commençant par A 
/C est la commande à exécuter 
/S est un sous-dossier récursif (n’a pas été inclus ici, car op n’a pas demandé) 
17
JJS

la réponse de adn31415 est correcte, mais se brise si vous le mettez dans un script batch ou cmd. Je me suis cogné la tête pendant des heures jusqu'à ce que je sache que c'est comme ça que vous l'utilisez.

Dans la fenêtre de commande DOS:

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

Dans le script batch ou cmd:

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

Si vous souhaitez le placer dans un fichier ".bat" ou ".cmd", vous devez doubler les caractères "%".

9
Sam B