批处理文件如果存在文件检查失败

时间:2013-10-21 12:23:19

标签: batch-file

我可能做错了什么但是我在为构建编写批处理文件脚本时遇到了一个有趣的行为。

我必须编写两个不同的路径,一个用于构建机器,一个用于我的开发机器,以便脚本在测试时正确运行。

所以我有以下内容:

IF EXIST "%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe" ( 
   SET VARNAME=<PATH> 
) ELSE ( 
   IF EXIST "%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe" (
      SET VARNAME=<PATH> 
   )
)

在开发机器上,路径应为路径B,路径A不存在。然而父路径确实存在于两台机器上,并且子路径是相同的。但应用程序路径不一样。它们是Windows中的独特路径。

如果我在IF EXISTS表达式中包含'Filename.exe',则在开发计算机上,即使路径A在开发计算机上不存在,该语句也始终为路径A返回true。如果我删除Filename.exe,这是我解决问题的方法,路径A的路径返回false,路径B的路径返回True。

我假设应用程序安装正确并且构建系统存在Filename.exe,因为现在我无法准确测试它。

有没有其他人看到过这样的行为,或者还有其他一些我可以做的改变行为?

编辑:我应该提到这是在Windows XPsp3上 编辑:重新格式化代码以反映我的实际批处理文件格式,并避免其他人从我的快速类型混淆。我做了假设:D

3 个答案:

答案 0 :(得分:2)

试试这个......

IF EXIST "%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe" (
  SET VARNAME=<PATH>
) ELSE (
  IF EXIST "%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe" (
    SET VARNAME=<PATH>
  )
)

答案 1 :(得分:2)

IF EXIST "%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe" ( 
    SET VARNAME=<PATH> 
) ELSE ( 
  IF EXIST "%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe" ( 
    SET VARNAME=<PATH> 
  )
)

无法使用ELSE开始一行,因为没有这样的命令(它总是必须与if配对)。在第二个if上也缺少引号。

答案 2 :(得分:1)

如果那是确切的任务,那么这就是相同的逻辑。

IF EXIST "%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe" SET "VARNAME=<PATHB>"
IF EXIST "%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe" SET "VARNAME=<PATHA>"