2012-02-01 33 views
55

khi tôi đang chạy kịch bản này (từ một tập tin .bat):windows batch SET bên NẾU không làm việc

set var1=true 
if "%var1%"=="true" (
    set var2=myvalue 
    echo %var2% 
) 

tôi luôn luôn nhận được:

ECHO is on. 

Nghĩa biến var2 là không thực sự bộ. Có ai vui lòng giúp tôi hiểu tại sao không?

Trả lời

103

var2 được đặt, nhưng việc 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 này var2 trống.

Do đó cú pháp mở rộng bị trì hoãn tồn tại, nó sử dụng ! thay vì % và được đánh giá vào thời gian thực hiện, không phân tích cú pháp thời gian.

setlocal EnableDelayedExpansion 
set var1=true 
if "%var1%"=="true" (
    set var2=myvalue 
    echo !var2! 
) 
+5

Cảm ơn bạn đã tha cho tôi một nỗi đau lớn. – Myna

+14

Kịch bản lệnh hàng loạt của Friggin! –

+0

muito obrigado "" – durtto

Các vấn đề liên quan