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 var2est 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 EnableDelayedExpansionest 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 gotosyntaxe
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