Batch file 批处理文件(如果存在)文件检查失败

Batch file 批处理文件(如果存在)文件检查失败,batch-file,Batch File,我可能做错了什么,但在为构建编写批处理文件脚本时遇到了一个有趣的行为 我必须为两个不同的路径编写脚本,一个用于构建机器,另一个用于开发机器,以便在测试时脚本能够正确运行 所以我有以下几点: IF EXIST "%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe" ( SET VARNAME=<PATH> ) ELSE ( IF EXIST "%PROGRAMFILES%\Parent Path\Path B\

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

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

所以我有以下几点:

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> 
   )
)
如果存在“%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe”(
设置变量名=
)其他(
如果存在“%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe”(
设置变量名=
)
)
在开发机器上,路径应该是路径B,路径A不存在。然而,两台机器上都存在父路径,子路径是相同的。但应用程序路径不同。它们是Windows中唯一的路径

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

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

有没有其他人见过这样的行为,或者我可以做些什么来改变这种行为

编辑:我应该提到这是在WindowsXPSP3上 编辑:重新格式化代码以反映我的实际批处理文件格式,并避免其他人因我的快速键入而产生混淆。虚拟我做的假设:D

试试这个

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>
  )
)
如果存在“%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe”(
设置变量名=
)否则(
如果存在“%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe”(
设置变量名=
)
)
如果存在“%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe”(
设置变量名=
)其他(
如果存在“%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe”(
设置变量名=
)
)

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

如果这正是任务,则这是相同的逻辑

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>"
如果存在“%PROGRAMFILES%\Parent Path\Path B\Subpath\Filename.exe”设置“VARNAME=”
如果存在“%PROGRAMFILES%\Parent Path\Path A\Subpath\Filename.exe”,请设置“VARNAME=”

这是两行吗<代码>),
其他
必须在同一行。如果……在我的实际代码中有引号,则第二行上也缺少引号。很抱歉没有在示例中引用。示例:D是的,这些在批处理文件中格式正确。我在批处理文件中遇到此问题,因为我的路径中没有包含.exe扩展名。在执行运行时“c:\program files\thing”工作正常,当“thing.exe”中缺少“.exe”时,检查其存在性失败“。希望这能对其他人有所帮助。我只是在这里以这种方式展示了它,以便读者更容易阅读,这样人们就不必滚动了。很抱歉造成混淆。我现在唯一想做的是检查
enableDelayedExpansion
-->
setlocal enableDelayedExpansion
如果存在的话。”“!PROGRAMFILES!\Parent Path\Path A\Subpath\Filename.exe”“
这基本上就是我所拥有的。如果我删除了'Filename.exe',则检查有效。如果我包含Filename.exe,则批处理文件将始终显示路径A存在,而它不存在。请记住:在这个测试中,我只删除'Filename.exe'。我不会修改If EXIST()的结构,否则()声明。我想尝试此方法的唯一原因是因为我使用此方法测试64位系统上的Program Files(x86)文件夹,并且它已经成功运行了一段时间。此代码工作正常。批处理文件中肯定发生了更多的情况,或者在您询问的内容和我听到的内容之间存在误解。
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>"