批量嵌套If语句错误,未定义变量

时间:2016-02-08 10:19:37

标签: batch-file if-statement cmd nested undefined

我遇到一个简单的批处理脚本问题。参见:

SET TEST=
IF NOT DEFINED TEST ( 
    SET "TEST=1"
) ELSE (
    IF %TEST% LSS 1 ( SET "TEST=1")
)

这里if分支中的if失败,因为没有定义变量TEST。但是如果没有定义变量TEST,则甚至不应该执行else分支!? 这是什么问题? (我知道,这个代码可以工作,如果我离开else并在if语句下写,但是每次都会执行此代码。) 如何解决这个问题?

THX。

2 个答案:

答案 0 :(得分:3)

Magoo的回答可以防止错误,但会导致alphabetical comparison而不是数字。我认为最好使用delayed expansionadditional if defined statement

setlocal enableDelayedExpansion
SET "TEST="
IF NOT DEFINED TEST ( 
    SET "TEST=1"
) ELSE (
    if defined test IF !TEST! LSS 1 ( SET "TEST=1")
)

答案 1 :(得分:2)

整个语句是parsed,在执行之前检查语法的正确性。

解析器找到

) ELSE (
    IF LSS 1 ( SET "TEST=1")
)

和对象,因为1不是比较运算符。

) ELSE (
    IF "%TEST%" LSS "1" ( SET "TEST=1")
)

应该解决问题。