Réponses:
var2 est défini, mais l'expansion de la ligne echo %var2%
se produit avant l'exécution du bloc.
A ce moment var2
est vide.
Par conséquent, la syntaxe delayExpansion existe, elle utilise à la !
place de %
et elle est évaluée 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!
)
&
et &&
opérateurs. Ce code set x=some & set y=%x%thing & echo results %y%
sort %x%thing
.
Je suis un peu en retard à la fête mais une autre façon de gérer cette condition est de continuer le processus à l'extérieur if
, comme celui-ci
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Ou / et utilisez la goto
syntaxe
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 «dans le temps» et vous n'en avez pas besoin setlocal EnableDelayedExpansion
. En bout de ligne, si vous repensez la conception de votre script, vous pouvez le faire comme ça
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause
.. et ça marche. "si vous créez une variable dans le fichier de commandes à laquelle il est possible d'accéder n'importe où dans le programme." . aticleworld.com/batch-file-variables-and-scope