在 Vista/Windows 7 的 32 位和 64 位版本中从 CMD.EXE 查找应用程序的正确方法

在 Vista/Windows 7 的 32 位和 64 位版本中从 CMD.EXE 查找应用程序的正确方法

背景

我有一个可以正常工作的现有 CMD 脚本。它从 PROGRAM FILES 启动一个应用程序,如下所示

"%PROGRAMFILES%\MyApp\app.exe" 

问题

  • 它在 32 位版本的 Windows(Vista、Windows 7)上运行良好
  • 但在 64 位版本的 Windows 上,应用程序将安装到“Program Files (x86)”而不是“Program Files”(这是在 32 位操作系统上发生的情况)

我正在寻找

  • 一个可以稳健地处理这两种情况的脚本(即它根据操作系统“做正确的事情”)
  • 仅使用 CMD.EXE 中的功能的方法。我对使用 Powershell 等的解决方案感到好奇,但这些对我没有帮助——Powershell 不会出现在运行此脚本的机器上。

答案1

如同马特的正确答案. 基本上在这个版本中已经验证了完整的路径。

SET AppExePath="%ProgramFiles(x86)%\MyApp\app.exe"
IF NOT EXIST %AppExePath% SET AppExePath="%ProgramFiles%\MyApp\app.exe"
%AppExePath%

答案2

这是我能想到的最好的办法:

set strProgramFiles=%ProgramFiles%
if exist "%ProgramFiles(x86)%" set strProgramFiles=%ProgramFiles(x86)%
"%strProgramFiles%\MyApp\app.exe"

答案3

基本上,您需要测试 ProgramFiles(x86) 环境变量来确定您是否在 64 位 Windows 中。这是一个示例批处理文件。

if "%programfiles(x86)%zzz"=="zzz" goto 32BIT
echo 64-bit Windows installed
"%PROGRAMFILES(x86)%\MyApp\app.exe"
goto END

:32BIT
echo 32-bit Windows installed
"%PROGRAMFILES%\MyApp\app.exe"

:END

答案4

我只需用一行(非常)强大的代码就可以做到这一点:

"%PROGRAMFILES%\MyApp\app.exe" || "%ProgramFiles(x86)%\MyApp\app.exe"

||如果前一个命令失败(即“未找到”),则仅执行第二个命令。

相关内容