这算是Batch脚本一个很常用的知识点,但隔了一阵子没写Bat,居然又犯了小白错误。
正面例子 @echo off set src=%1 if defined src ( echo "not null" ) else ( echo "null" ) 反面例子 @echo off set src=%1 if defined %src% ( echo "not null" ) else ( echo "null" )差别就是在if defined的使用上。其实if [NOT] defined后面跟的是参数名,而不是要调用这个参数,所以用%src%是不合适的。如果用了反面例子,那么Batch会认为%src%是一个参数,而这个参数显然是在文件中没有定义的,所以执行这个bat(任意带一个参数),都会输出null;只有在输入参数为src的时候,%src%解析为src了,而if defined知晓src是已经定义过的,才会进入if为true的语句块中。而如果不带参数去执行bat,则%src%会报错:The syntax of the command is incorrect.
参考:http://ss64.com/nt/if.html