2014-03-19 65 views
0

我創建了一個嵌套的if語句,只執行非常簡單的任務。這是下面的代碼:嵌套的IF語句,意外的錯誤

@ECHO OFF 
SET ANS=%1 
IF "%ANS%"=="" (ECHO You Entered Nothing 
) 
    IF /i %ANS%==Y (ECHO You entered Yes 
    ) 
    IF /i %ANS%==N (ECHO You entered NO 
    ) 
     IF %ANS%==? (ECHO I am confused 
     ) 

我的問題是,當「%ANS%」 ==「」我得到一個「(在這個時候意外」呼應我所提供的消息後,其他一切工作方式。計劃,但我不知道爲什麼我收到此消息。

+0

你爲什麼認爲這些嵌套if語句?另外,請查看批處理中的if-else語句的正確語法[here](http://stackoverflow.com/a/4983613/63733) - echo語句應該放在新行上。 – marapet

+0

兩種方式都有相同的結果。除了「%ans」==「」生成「(此時出乎意料)」之外的所有工作。 – Kwehmann

回答

1

錯誤消息來自如預期的第二IF。 如果%1是空的,你的第一個IF給你「你輸入任何內容」。 然後第二IF行轉換爲

IF /i ==Y (ECHO You entered YES 

(因爲%ANS%爲空)

因此,您會得到一個「(此時意外)。

爲了解決這個問題,寫

IF /i "%ANS%"=="Y" (ECHO You entered Yes 
+0

謝謝,在這裏和那裏添加幾個引號解決了問題 – Kwehmann

+0

是的。原因是整個IF塊語句在一次傳遞中被解析,並且所有語法都必須是正確的,即使它沒有被執行。如果變量未定義,後面的IF語句將變爲無效。 – dbenham

0

試試這個...它完美

@ECHO OFF 
SET ANS="%1" 
IF %ANS%=="" (ECHO You Entered Nothing 
) 
    IF /i %ANS%=="Y" (ECHO You entered Yes 
    ) 
    IF /i %ANS%=="N" (ECHO You entered NO 
    ) 
     IF %ANS%=="?" (ECHO I am confused 
     ) 
1

這有保護其免受spacesduoble quotes&字符元素。

@ECHO OFF 
SET "ANS=%~1" 
IF "%ANS%"==""  (ECHO You Entered Nothing ) 
IF /i "%ANS%"=="Y" (ECHO You entered Yes  ) 
IF /i "%ANS%"=="N" (ECHO You entered NO  ) 
IF "%ANS%"=="?" (ECHO I am confused  )