你好我再说:)我写的批处理文件有问题。它在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位上工作吗?
总是感谢:)
答案 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