批量文件在64位Vista中查询注册表

时间:2009-04-21 06:13:44

标签: batch-file scripting 64-bit registry

你好我再说:)我写的批处理文件有问题。它在32位上工作正常,但显然它不适用于64位系统,我不知道为什么,因为我无法访问64位系统。

这是适用于Vista 32位系统的代码

    @echo off
Set Reg.Key=HKLM\SOFTWARE\Malwarebytes' Anti-Malware
  Set Reg.Val=InstallPath
  For /F "Tokens=2*" %%A In (
   'Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"'
  ) Do Call Set MBAMPATH=%%B

有人可以重写它以便在64位上工作吗?

总是感谢:)

3 个答案:

答案 0 :(得分:6)

x86和x64版本的Windows上的批处理文件没有区别。您遇到的问题是由WoW64和透明的注册表重定向引起的,有关详细信息,请参阅here

HKLM\SOFTWARE\Wow6432Node是64位Windows安装上32位软件的正确注册表项,此代码可在我的计算机上运行:

Set Reg.Key=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Malwarebytes' Anti-Malware
Set Reg.Val=InstallPath
For /F "Tokens=2*" %%A In (
    'Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"' )
Do Call Set MBAMPATH=%%B
echo %mbampath%

您的其他帖子包含基于%processor_architecture%环境变量的条件分支。问题是(至少在我的机器上)%processor_architecture%"AMD64"而不是"x64"

为什么不只是查询两个可能的注册表项而不是基于体系结构的分支?

答案 1 :(得分:0)

首先,我知道64位Windows上的批处理文件与32位的批处理文件不同。

您可以尝试从头开始删除echo off,看看哪一行产生了哪些错误消息(假设您看到了任何错误消息)。

但是,也许某些内容与您在for循环中使用的撇号发生冲突。您可以尝试将其更改为

for /f "usebackq tokens=2*" %%A in (`Reg Query "%Reg.Key%" /v "%Reg.Val%" ^| Find /I "%Reg.Val%"`) Do Call Set MBAMPATH=%%B

虽然我们正在努力。你为什么call set在那里?这不是必需的,所以你也可以删除它:

... do set MBAMPATH=%%B

答案 2 :(得分:0)

我遇到类似的问题,我需要知道Notepad ++安装目录。如果是在x64操作系统上,那么我需要查看HKLM \ SOFTWARE \ Wow6432Node \ Notepad ++注册表项。我不寻找处理器拱的原因是你可以在64位的机器上放置32位操作系统。这是我提出的代码,似乎为我找到了正确的道路:

::找出x86或x64操作系统 - 需要不同的reg键来查询install dir 如果存在“%PROGRAMFILES(X86)%”转到X64 ELSE转到X86

:X64 FOR / F“tokens = 2 * delims =”%% A IN('REG QUERY“HKLM \ SOFTWARE \ Wow6432Node \ Notepad ++”')DO SET NPPPath =“%% B \ plugins \ APIs” 回声NPPPath是%NPPPath% SET BITNESS =“SixtyFour” 转到CopyAPIFile

:X86 FOR / F“tokens = 2 * delims =”%% A IN('REG QUERY“HKLM \ SOFTWARE \ Notepad ++”')DO SET NPPPath =“%% B \ plugins \ APIs” :: echo NPPPath是%NPPPath% SET BITNESS =“ThirtyTwo” 转到CopyAPIFile