[英]windows batch SET inside IF not working
當我運行此腳本時(來自 .bat 文件):
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo %var2%
)
我總是得到:
ECHO is on.
這意味着沒有真正設置var2
變量。 誰能幫我理解為什么?
var2 已設置,但echo %var2%
行中的擴展發生在執行塊之前。
此時var2
為空。
因此延遲擴展語法存在,它使用!
而不是%
,它是在執行時評估的,而不是解析時。
請注意,為了使用!
,需要附加語句setlocal EnableDelayedExpansion
。
setlocal EnableDelayedExpansion
set var1=true
if "%var1%"=="true" (
set var2=myvalue
echo !var2!
)
我參加聚會有點晚了,但處理這種情況的另一種方法是繼續在外面處理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
。 底線,如果您重新考慮腳本的設計,您可以這樣做
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.