Відповіді:
var2 встановлюється, але розширення в рядку echo %var2%
відбувається до виконання блоку.
В цей час var2
порожньо.
Тому синтаксис відкладеного розширення існує, він використовується !
замість, %
і він оцінюється під час виконання, а не час аналізу.
Зверніть увагу, що для використання потрібна !
додаткова заява setlocal EnableDelayedExpansion
.
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
&
і для &&
операторів. Цей код set x=some & set y=%x%thing & echo results %y%
виводиться %x%thing
.
Я трохи запізнююся на партію, але ще один спосіб вирішити цю умову - продовжувати процес поза if
, як це
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Або / і використовувати goto
синтаксис
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
Таким чином розширення відбувається "в часі", і вам не потрібно setlocal EnableDelayedExpansion
. Підсумок, якщо ви переосмислите дизайн свого сценарію, ви можете зробити це так
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause
.. і він працює. "якщо ви створите змінну в пакетному файлі, що до неї можна отримати доступ будь-де в програмі." . aticleworld.com/batch-file-variables-and-scope