batch文件中如何判断一个变量是否存在 (注意不是变量是否有值)

注意, 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%  

是没有问题的, 但是当它不存在的时候, 就会出现如上的问题

Batch: The syntax of the command is incorrect

应该是由于VS120COMNTOOLS环境变量不存在, 在%% 引用的时候出了问题。

所以在bat文件中安全的判断一个环境变量是否存在的办法是用
IF DEFINED,

当把 IF EXIST %VS120COMNTOOLS%  
改成 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%" == ""
-如果不存在, 还去用此变量比较,则必然出错
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值