背景
我有一个可以正常工作的现有 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"
||
如果前一个命令失败(即“未找到”),则仅执行第二个命令。