4

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

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

所以我有以下内容:

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

4

3 回答 3

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>
  )
)
于 2013-10-21T12:37:46.510 回答
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 上也缺少引号。

于 2013-10-21T12:40:24.540 回答
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>"
于 2013-10-21T20:58:46.450 回答