簡體   English   中英

如果不工作,Windows批處理SET里面

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM