quand j'exécute ce script (à partir d'un fichier .bat):
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo %var2%
)
Je reçois toujours:
ECHO is on.
Signifiant le var2
La variable n'était pas vraiment définie. Quelqu'un peut-il m'aider à comprendre pourquoi?
var2 est défini, mais le développement dans la ligne echo %var2%
se produit avant que le bloc ne soit exécuté.
En ce moment var2
est vide.
Par conséquent, la syntaxe delayExpansion existe, elle utilise !
au lieu de %
et il est évalué au moment de l'exécution, pas au moment de l'analyse.
Veuillez noter que pour utiliser !
, la déclaration supplémentaire setlocal EnableDelayedExpansion
est nécessaire.
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
Je suis un peu en retard pour la fête mais une autre façon de traiter cette condition est de continuer le processus en dehors de if
, comme ceci
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Ou/et utilisez la syntaxe goto
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
De cette façon, l'expansion se produit "à temps" et vous n'avez pas besoin de setlocal EnableDelayedExpansion
. En bout de ligne, si vous repensez la conception de votre script, vous pouvez le faire comme ça