我遇到一个简单的批处理脚本问题。参见:
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。
答案 0 :(得分:3)
Magoo的回答可以防止错误,但会导致alphabetical comparison而不是数字。我认为最好使用delayed expansion和additional 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")
)
应该解决问题。