2014-03-19 32 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  )