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

Batch nested If statement error with not defined variables

我对简单的批处理脚本有疑问。参见:

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

这里else分支的if失败了,因为变量TEST没有定义。但是,如果未定义变量 TEST,甚至不应该执行 else 分支!? 这是什么问题? (我知道,如果我保留 else 并将其写在 if 语句下,这段代码会起作用,但是每次都会执行这段代码。) 如何解决这个问题?

谢谢。

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

解析器发现

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

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

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

应该可以解决问题。

Magoo 的回答将防止错误,但会导致 alphabetical comparison instead of numerical.I think it will be better to use delayed expansion and one 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")
)