我需要使用.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"
有没有办法在不知道操作系统版本的情况下读取密钥?
当然我知道最初我可以检查操作系统版本,然后可以相应地编写代码。但是,除此之外,有没有其他方法可以做到这一点?
谢谢!
答案 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}
谢谢!