批量嵌套 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")
)
我对简单的批处理脚本有疑问。参见:
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")
)