Відповіді:
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