注意, batch 判断变量的是否存在不等于判断其是否有值。
不能混淆。 变量首先得存在, 即在系统中有定义, 然后确实存在后才能对其进行值得各种判断。
-如果存在但未赋值, 其初值可能为空 “”, 一般判断其是否为空的用法为:IF "%VAR%" == ""
-如果不存在, 还去用此变量比较,则必然出错。
这两天在修改一个batch文件,出现了一个错误
Batch: The syntax of the command is incorrect
后来定位到这一行 IF EXIST %VS120COMNTOOLS%
由于本人电脑上安装的是VS2015 (对应VS140COMNTOOLS), 没有安装VS2013
(对应VS120COMNTOOLS), 当把其中的120改为140的时候, 运行时是没问题的;但是一旦改回120版本, 就会出现这个可恶的错误
Batch: The syntax of the command is incorrect
后来查出应该是 IF EXIST 的用法问题, 当IF EXIST 后的变量 %VS120COMNTOOLS% 确实存在的时候 (是否存在的标准是在命令行下输入SET回车, 看是否环境变量中有这个变量), 这一句
IF EXIST %VS120COMNTOOLS%
是没有问题的, 但是当它不存在的时候, 就会出现如上的问题
所以在bat文件中安全的判断一个环境变量是否存在的办法是用
IF DEFINED,
当把 IF EXIST %VS120COMNTOOLS%
::This command is required to be enabled before using "IF DEFINED"
SETLOCAL ENABLEEXTENSIONS
改成 IF DEFINED VS120COMNTOOLS
后,bat文件中的运行终于正常了, 即使 IF DEFINED 后跟随的变量不存在。
同时为了确保IF DEFINED 确实能正常工作, 要先用本地化设置
::This command is required to be enabled before using "IF DEFINED"
SETLOCAL ENABLEEXTENSIONS
关于SETLOCAL ENDLOCAL 的用法, 请参考batch手册
http://www.robvanderwoude.com/battech_defined.php Batch How To ... Verify if Variables are Defined
http://www.robvanderwoude.com/cmdextmsg.php Command Extensions
注意判断变量的是否存在不等于判断其是否有值。
不能混淆。 变量首先得存在, 即在系统中有定义, 然后确实存在后才能对其进行值得各种判断。
-如果存在但未赋值, 其初值可能为空 “”, 一般判断其是否为空的用法为:IF "%VAR%" == ""
-如果不存在, 还去用此变量比较,则必然出错。