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

Disons qu'il y a un dossier dans le lecteur D: :

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

Je veux 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'ai cependant une erreur 🙁

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

La commande del fonctionne avec * , mais j'ai également besoin de supprimer des dossiers.
Existe-t-il un moyen de le faire via la commande rmdir ?

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

Utilisez ceci pour tester cependant:

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

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

Gardez à l'esprit que cela cherchera également des sous-dossiers tels que "C: \ temp \ jjj \ aaa" et supprimerait le dossier aaa. Si vous voulez simplement regarder les dossiers de niveau supérieur "C: \ temp \ aaa", puis supprimer "/s" de la commande.

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

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 voudrez peut-être remplacer la commande rd par echo premier. De cette façon, vous pouvez vous assurer que tout ce qui ne devrait pas être supprimé en fait serait.

Modèles multiples

Pour supprimer plusieurs dossiers correspondant à différents motifs, la syntaxe n'est pas trop différente. Comme le dit correctement @dbenham, une commande à une seule ligne suffit. Vous pouvez également spécifier des chemins différents:

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

Bonus – Vérification de l'existence du dossier

Dans le cas où 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. 

Autres lectures

  • Pour / d – Loop through directory
  • Exécution conditionnelle
  • Référence de ligne de commande

Comment personne n'a-t-il pas encore expliqué l'OP concernant les fichiers?

forfiles /PD:\ /MA* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

 / M est un masque de recherche, à la recherche de fichiers commençant par A
 / P est pathname - où commence la recherche
 / S est un sous-dossier récursif (n'a pas inclus ici, parce que op n'a pas demandé)
 / C est la commande à exécuter

La réponse adn31415 est correcte, mais se casse si vous mettez cela dans un script batch ou cmd. J'ai frappé la tête pendant des heures jusqu'à ce que j'ai compris 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 mettre dans un fichier ".bat" ou ".cmd", vous devez doubler les caractères "%".