Câu trả lời:
var2 được thiết lập, nhưng sự mở rộng trong dòng echo %var2%
xảy ra trước khi khối được thực thi.
Tại thời điểm var2
này là trống rỗng.
Do đó, cú pháp delayExpansion tồn tại, nó sử dụng !
thay vì %
và nó được đánh giá tại thời điểm thực thi, không phải thời gian phân tích cú pháp.
Xin lưu ý rằng để sử dụng !
, setlocal EnableDelayedExpansion
cần có bản khai bổ sung .
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
&
và các &&
toán tử. Mã này set x=some & set y=%x%thing & echo results %y%
xuất ra %x%thing
.
Tôi đến bữa tiệc hơi muộn nhưng một cách khác để giải quyết tình trạng này là tiếp tục xử lý bên ngoài if
, như thế này
set var1=true
if "%var1%"=="true" (
set var2=myvalue
)
echo %var2%
Hoặc / và sử dụng goto
cú pháp
set var1=true
if "%var1%"=="true" (
set var2=myvalue
goto line10
) else (
goto line20
)
. . . . .
:line10
echo %var2%
. . . . .
:line20
Bằng cách này, việc mở rộng xảy ra "đúng lúc" và bạn không cần setlocal EnableDelayedExpansion
. Tóm lại, nếu bạn suy nghĩ lại về thiết kế tập lệnh của mình, bạn có thể làm như vậy
echo off set var1=true if "%var1%"=="true" ( set var2=myvalue ) echo %var2% pause
.. và nó đang hoạt động. "nếu bạn sẽ tạo một biến trong tệp loạt mà nó có thể được truy cập ở bất kỳ đâu trong chương trình." . aticleworld.com/batch-file-variables-and-scope