Mar*_*tin 8 windows-registry windows-7 64-bit command-line environment-variables
我们xyz.cmd在工作中使用批处理文件 ( )编写了相当多的脚本和小助手。Windows 7 现在才开始在这里普及,很明显,我们遇到了与 32 位和 64 位 Windows 的不同环境变量相关的问题。
具体来说,如果您C:\Windows\system32\cmd.exe在 64 位 Windows 上运行,您将获得:
...
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
...
Run Code Online (Sandbox Code Playgroud)
而如果您C:\Windows\SysWOW64\cmd.exe在 64 位 Windows 上启动,您将获得:
...
ProgramFiles=C:\Program Files (x86) <-- NOTE
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
...
Run Code Online (Sandbox Code Playgroud)
碰巧也是如此,因为这个 cmd.exe 是一个 32 位进程,它也“免费”获得所有其他 SysWOW64 重定向——任何调用都regedit将转到 32 位注册表等。
如果批处理文件应该执行一些与 32 位应用程序相关的任务,例如路径 + 注册表内容,这将非常有用。
鉴于我有一类我希望始终使用 32 位版本运行的批处理文件cmd.exe,是否有 - 简单!-- 强制这些批处理文件在 64 位版本的 Windows 上始终使用 32 位 cmd.exe 并在 32 位版本的 Windows 上正常运行的方法?
显然我可以向每个这样的批处理文件添加一个“标题”以更改环境变量和 regedit 调用和/或显然我可以告诉用户“通过 SysWOW64 cmd.exe 运行这个批处理文件”,但这些解决方案似乎都不是很有魅力 :-)
Nic*_*253 11
对于您的问题,我有三种可能的解决方案:
1) 使用包装批处理文件
在我曾经工作过的一家公司,我们运行的所有内容都有一个单独的包装批处理文件。我们这样做是为了简化与用户的交互,但它的工作原理类似。如果需要,您可以为每个批处理文件创建一个包装器(实质上,创建两个批处理文件),或者创建一个允许您从菜单中选择每个批处理文件的单个包装器(如http://http-server.php所述)。 carleton.ca/~dmcfet/menu.html)。您可以让每个菜单选择标识要运行的批处理文件的路径,然后您可以让包装器选择正确的 cmd.exe 来启动它。
2) 使用批处理文件作为自包装
对于每个批处理文件,您可以包含一个标头,用于确定您使用的操作系统(32 位或 64 位)。如果您使用的是 64 位操作系统,您会知道,默认情况下,您使用 64 位版本的 cmd.exe 启动它。您可以让该文件然后使用相同的批处理文件启动 32 位版本的 cmd.exe,但您也可以向批处理文件传递一个标志,告诉它忽略 64 位检查。然后它将在正确的 32 位 cmd.exe 下运行。
例如:
@ECHO Off
::Check if 64-bit check skip flag exists
IF %1 == /skipcheck (goto run)
::Check if OS is 64-bit
IF %processor_architecture%==AMD64 (<path_to_32-bit_cmd> /c "<path_to_batch_file>\<name_of_my_batch_file>" /skipcheck)
IF %processor_architecture%==AMD64 (goto end)
:run
echo Hello World!
:end
Run Code Online (Sandbox Code Playgroud)
我还没有测试过上面的代码,所以我可能在错误的地方有一些引号或括号,但这是一般的想法。
3)迁移到PowerShell
PowerShell 适用于所有 Windows 操作系统 XP 和更新版本。PowerShell 由 Microsoft 设计,最终取代了简单的 cmd.exe,并提供了一种丰富的语言,几乎可以完成任何任务。大多数批处理程序实际上可以在 PowerShell 中运行,并且最多可能需要最少的调整。
| 归档时间: |
|
| 查看次数: |
15441 次 |
| 最近记录: |