批处理文件:使用IF EXIST

时间:2018-08-09 17:41:49

标签: batch-file

请考虑以下批处理文件:

=================== exist-test.bat
@echo off
set pavtest=
if EXIST %programfiles(x86)%\AAA (
     set pavtest = AAA
     echo we have done the AAA test
) ELSE (
    if EXIST %programfiles%\BBB (
     set pavtest = BBB
     echo we have done the BBB test
    )
)

假设AAA和BBB文件夹都不存在。然后我认为逻辑将是:

  1. 第一个IF EXIST为false,因此控制权转移到了ELSE
  2. 第二个IF存在也为false,因此我们也跳过了此分支。

相反,在Win7上发生的是两个echo语句都被执行了,当然,结尾处的pavtest值是BBB。

谁能解释我的逻辑为什么错误?谢谢!

1 个答案:

答案 0 :(得分:1)

始终最好的做法是在使用的任何文件路径周围使用双引号。这样可以保护空格和特殊字符。也不要在SET命令中使用空格。空格成为变量名称和变量值的一部分。

@echo off
set pavtest=
if EXIST "%programfiles(x86)%\AAA" (
     set pavtest=AAA
     echo we have done the AAA test
) ELSE (
    if EXIST "%programfiles%\BBB" (
     set pavtest=BBB
     echo we have done the BBB test
    )
)