2014-05-24 147 views
0

我試圖在Windows批處理文件這項工作:如果語法Windows批處理

if not exist "%~n1.ext" (
    set /P z="PROMPT (y,n)?" 
      if /i "%z%" == "y" (
       echo if is working 
      ) 
) 

但無論輸入是什麼,它永遠不會進入回聲部分。語法中有錯嗎?

+0

肯定有一些扭曲 - 如果我多次運行它,並給答覆了''的提示,'B' ,'c'等等,然後第一次%z%是空的,之後它有前面的答案,而不是我剛纔給出的答案。 – ClickRick

+2

另一個陷入「延期擴張陷阱」^^ – Stephan

回答

2

當你使用一個塊中的變量(()之間,則需要啓用延遲擴展:

setlocal enabledelayedexpansion 
set var=hello 
if "a"=="a" (
    set var=world 
    echo %var% !var! 
) 
+0

哦,我現在看到。那麼我必須閱讀關於延遲擴展的內容。謝謝。 – user304822

1

斯蒂芬是正確的,你需要使用嵌套變量時使用enabledlayedexpansion這裏是你的代碼與語法(使用這些變量時!更換%):

setlocal enabledelayedexpansion 
if not exist "%~n1.ext" (
    set /P z="PROMPT (y,n)?" 

    if /i "!z!" == "y" (
     echo if is working 
    ) 
)