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.
- Obtenir le nom du dossier actuel par une commande DOS?
- Existe-t-il un moyen d'obtenir des métadonnées de fichiers à partir de la ligne de commande?
- Comment puis-je créer un fichier Batch Windows qui ne montre pas l'invite de commandes lors de l'exécution?
- Les variables dans le fichier batch ne sont pas configurées à l'intérieur de l'IF?
- Exécutez un fichier batch de manière complètement cachée
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.
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
.
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.
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"
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.
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 "%".