需要从32位和64位机器Windows机器上读取registry值

我需要使用.cmd文件读取一些registry值。 为此,我正在使用以下命令。

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

问题是,当我在32位上安装软件时,registry的path是: "HKLM\SOFTWARE\Looptest" ,当我在64位机器上安装软件时,path变成: "HKLM\SOFTWARE\Wow6432Node\Looptest"

有没有办法读取密钥而不知道操作系统的版本?

当然,我知道最初我可以检查操作系统版本,然后可以相应地编写代码。 但除此之外,还有别的办法吗?

谢谢 !

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位机器上定义,所以你的代码也可以在那里正常工作。

简短的回答:不。

长时间回答:Windows x64版本将在运行32位进程(透明重定向)时自动决定从Wow6432节点读取。 所以,如果你可以确保你的命令是在32位的进程中运行的,你可以依靠这个机制,而不需要打扰Wow6432节点。

如果你的命令以64位的方式运行,你必须自己寻找合适的地方。

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

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

 @echo off set replacementString= if defined Programfiles(x86) set "replacementString=Wow6432Node\" FOR /f "tokens=2*" %%a in ('reg query "HKLM\SOFTWARE\%replacementString%Looptest" /v "tscFile"') do set "TSCFile=%%b" echo %TSCFile% 

谢谢!