背景
我有一个可以正常工作的现有 CMD 脚本。它像这样从 PROGRAM FILES 启动一个应用程序
"%PROGRAMFILES%\MyApp\app.exe"
问题
- 它适用于 32 位版本的 Windows(Vista、Windows 7)
- 但在 64 位版本的 Windows 上,该应用程序将安装到“程序文件(x86)”而不是“程序文件”(这在 32 位操作系统上会发生)
我在寻找什么
- 一个能稳健处理这两种情况的脚本(即,它“做正确的事”取决于它所在的操作系统)
- 一种仅使用 CMD.EXE 中的功能的方法。我对使用 Powershell 等的解决方案很好奇,但这些对我没有帮助 - Powershell 不会在该脚本将运行的机器上。
这是我能想到的最好的:
类似于马特的正确答案。基本上在这个版本中,完整的路径已经过验证。
基本上,您需要测试 ProgramFiles(x86) 环境变量以确定您是否在 64 位 Windows 中。这是一个示例批处理文件。
另一种方法是在 32 位下运行脚本
cmd.exe
,这样它就可以利用 WOW64 文件系统重定向和环境变量修改。如果您可以修改调用者,您甚至不必修改相关脚本。您甚至可以让脚本检测它何时在 64 位下执行
cmd.exe
并使用 32 位重新启动cmd.exe
:请注意,这个 hack 错误可能会导致产生无穷无尽的
cmd.exe
进程。这就是为什么我使用goto
and 一个标签而不是if ... ( ... )
: 命令行参数可能包含括号,并对if ... ( ... )
第一个右括号执行贪婪搜索。我会简单地在一个(非常)健壮的行中做到这一点:
如果前一个命令失败(又名“未找到”
||
),则仅执行第二个命令。下面的脚本可以显示 WINDOWS PC 的操作系统类型