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 var2nà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 EnableDelayedExpansioncầ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 gotocú 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