ECHO OFF
setlocal
FOR /L %%A in (1,1,5) DO (
SET /a "B=%%A-1"
call ECHO %%B%%
)
Puisque vous n'utilisez pas setlocal
, B
sera réglé sur la valeur de la course précédente. %B%
sera remplacé par 4
car B
a été défini sur 4
par l'exécution précédente. l'astuce call echo
utilise une analyse syntaxique pour récupérer la valeur actuelle (au moment de l'exécution) de la variable.
Voilà "le fonctionnaire" chemin:
ECHO OFF
setlocal enabledelayedexpansion
FOR /L %%A in (1,1,5) DO (
SET /a "B=%%A-1"
ECHO !B!
)
En mode delayedexpansion
, !var!
récupère la valeur de var
comme il change au moment de l'exécution. Ce n'est pas sans ses inconvénients, mais vous devez lire sur delayedexpansion
pour un guide sur cette question.
Il s'agit d'un problème d'expansion retardé. Trop paresseux pour google, mais il y a des centaines de questions comme ça sur SO déjà. Pourquoi ne pas juste 'for/L %% A in (0,1,4)'? Si ce n'est pas pratique, alors vous devriez 'setlocal enabledelayedexpansion' et' echo! B! '. Pour plus d'informations, faites 'help set' dans une console cmd, en faisant attention à la section commençant par" Enfin, la prise en charge de l'expansion de variables d'environnement retardée a été ajoutée. " – rojo
Ce code ne génère pas un ** 4 ** cinq fois. Il sortira 'ECHO IS OFF' cinq fois. – Squashman
@Squashman Il sort 'ECHO IS OFF' cinq fois la première fois que je l'ai exécuté, mais ouput' 4' cinq fois la prochaine fois que je l'ai exécuté. – IslandPatrol