Est-il possible dans le fichier de commandes Windows d'appeler plusieurs commandes dans une seule FOR
boucle? Disons par exemple que je veux imprimer le nom du fichier et après le supprimer:
@ECHO OFF
FOR /r %%X IN (*.txt) DO (ECHO %%X DEL %%X)
REM the line above is invalid syntax.
Je sais que dans ce cas, je pourrais le résoudre en faisant deux boucles FOR distinctes: une pour afficher le nom et une pour supprimer le fichier, mais est-il possible de le faire en une seule boucle?
windows
batch-file
cmd
Marco Demaio
la source
la source
for %i in (1 2 3) do echo %i & echo foo
affiche ce à quoi je m'attendais: "1", "foo", "2", "foo", "3", "foo" (sur des lignes séparées).&&
plutôt que&
?&&
échouera si la première commande échoue,&
exécutera la deuxième commande malgré tout.DO
-parens. Vous pouvez leur échapper en leur ajoutant un^
.L'utilisation
&
est bien pour les commandes courtes, mais cette seule ligne peut devenir très longue très rapidement. Lorsque cela se produit, passez à la syntaxe multiligne.Placement
(
et)
questions. Les parenthèses rondes aprèsDO
doivent être placées sur la même ligne, sinon le fichier batch sera incorrect.Voir
if /?|find /V ""
pour plus de détails.la source
DO
doit PAS être placé à la ligne suivante, sinon il freine le fichier de commandes. Dans le code, lorsque j'écris une boucle for, je place généralement la{
ligne suivante entre accolades .SilverSkin et Anders ont tous deux raison. Vous pouvez utiliser des parenthèses pour exécuter plusieurs commandes. Cependant, vous devez vous assurer que les commandes elles-mêmes (et leurs paramètres) ne contiennent pas de parenthèses.
cmd
recherche avidement la première parenthèse fermante, au lieu de gérer gracieusement les ensembles imbriqués de parenthèses. Cela peut entraîner l'échec de l'analyse du reste de la ligne de commande, ou certaines des parenthèses peuvent être passées aux commandes (par exempleDEL myfile.txt)
).Une solution de contournement consiste à diviser le corps de la boucle en une fonction distincte. Notez que vous devez probablement sauter autour du corps de la fonction pour éviter de "tomber" dedans.
la source
C:\Program Files (x86)
.