需要从32位和64位机器Windows机器上读取注册表值

时间:2016-10-07 13:26:59

标签: windows batch-file operating-system command-prompt

我需要使用.cmd文件读取一些注册表值。我正在使用以下命令。

FOR /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Looptest" /v "tscFile"') do set "TSCFile=%%b"

问题在于,当我在32位上安装软件时,注册表的路径是:"HKLM\SOFTWARE\Looptest",当我在64位机器上安装软件时,路径变为:"HKLM\SOFTWARE\Wow6432Node\Looptest"

有没有办法在不知道操作系统版本的情况下读取密钥?

当然我知道最初我可以检查操作系统版本,然后可以相应地编写代码。但是,除此之外,有没有其他方法可以做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:2)

REQ QUERY /?并注意/ reg:32和/ reg:64开关。然后将这样的内容添加到bat文件的开头(在执行任何reg操作之前),以便它可以在32或64位计算机上运行。

set "Reg32="
set "Reg64="
if defined Programfiles(x86) set "Reg64=/reg:64" & set "Reg32=/reg:32"

这样做的另一个好处是,您可以通过为注册表操作使用适当的Regnn变量在64位计算机上指定32位或64位注册表区域。假设您在64位计算机上需要64位注册表区域,那么您的示例将变为:

FOR /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\Looptest" /v "tscFile" %Reg64%') do set "TSCFile=%%b"

由于%Reg64%未在32位机器上定义,因此您的代码也可以正常工作。

答案 1 :(得分:0)

简答:不。

答案很长:在运行32位进程(透明重定向)时,Windows x64版本将自动决定从Wow6432节点读取。因此,如果您可以确保您的命令在32位进程中运行,那么您可以依赖该机制,而不必为Wow6432节点而烦恼。

如果您的命令以64位进程运行,则必须自己寻找合适的位置。

您可以通过调用%windir%\SysWoW64\cmd.exe在64位窗口上运行32位cmd。不幸的是,32位窗口上缺少SysWoW64文件夹,所以你必须提前做出决定......

答案 2 :(得分:0)

从RGuggisberg的回答中得到一个想法后,我改变了我的代码:

body {direction:rtl}

谢谢!