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

use*_*666 6 windows 64-bit batch-file windows-command-prompt

背景

我有一个可以正常工作的现有 CMD 脚本。它从程序文件中启动一个应用程序,就像这样

"%PROGRAMFILES%\MyApp\app.exe" 
Run Code Online (Sandbox Code Playgroud)

问题

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

我在寻找什么

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

Mat*_*son 5

这是我能想到的最好的:

set strProgramFiles=%ProgramFiles%
if exist "%ProgramFiles(x86)%" set strProgramFiles=%ProgramFiles(x86)%
"%strProgramFiles%\MyApp\app.exe"
Run Code Online (Sandbox Code Playgroud)


spl*_*tne 5

类似于马特的正确答案。基本上在这个版本中,完整的路径被验证。

SET AppExePath="%ProgramFiles(x86)%\MyApp\app.exe"
IF NOT EXIST %AppExePath% SET AppExePath="%ProgramFiles%\MyApp\app.exe"
%AppExePath%
Run Code Online (Sandbox Code Playgroud)