Batch file 64位Vista中的批处理文件查询注册表

Batch file 64位Vista中的批处理文件查询注册表,batch-file,scripting,64-bit,registry,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.

大家好,我又来了:)我写的批处理文件有问题。它在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位上工作吗


始终感谢:)

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

您可以尝试从一开始就删除
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
当我们这样做的时候。你为什么在那里打电话?这不是必需的,因此您也可以将其删除:

... do set MBAMPATH=%%B

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

您可以尝试从一开始就删除
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
当我们这样做的时候。你为什么在那里打电话?这不是必需的,因此您也可以将其删除:

... do set MBAMPATH=%%B

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

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\u architecture%环境变量的条件分支。问题是(至少在我的机器上)
%processor\u architecture%
“AMD64”
而不是
“x64”


为什么不查询两个可能的注册表项,而不是根据体系结构进行分支?

在x86和x64版本的Windows上,批处理文件之间没有区别。您遇到的问题是由于WoW64和透明注册表重定向造成的,有关更多详细信息,请参阅

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\u architecture%环境变量的条件分支。问题是(至少在我的机器上)
%processor\u architecture%
“AMD64”
而不是
“x64”


为什么不查询两个可能的注册表项,而不是根据体系结构进行分支?

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

::了解x86或x64操作系统-是否需要不同的注册表项来查询安装目录 如果存在“%PROGRAMFILES(X86)%”转到X64 否则转到X86

:X64 对于/F“tokens=2*delims=“%%A IN('REG QUERY“HKLM\SOFTWARE\Wow6432Node\Notepad++”)中的,请设置NPPPath=“%%B\plugins\api” 回显NPPPath为%NPPPath% 设置BITNESS=“六十四” 转到复制文件

:X86 对于/F“tokens=2*delims=“%%A IN('REG QUERY“HKLM\SOFTWARE\Notepad++”)中的,请设置NPPPath=“%%B\plugins\api” ::回显NPPPath为%NPPPath% 设置BITNESS=“三十二”
转到CopyAPIFile

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

::了解x86或x64操作系统-是否需要不同的注册表项来查询安装目录 如果存在“%PROGRAMFILES(X86)%”转到X64 否则转到X86

:X64 对于/F“tokens=2*delims=“%%A IN('REG QUERY“HKLM\SOFTWARE\Wow6432Node\Notepad++”)中的,请设置NPPPath=“%%B\plugins\api” 回显NPPPath为%NPPPath% 设置BITNESS=“六十四” 转到复制文件

:X86 对于/F“tokens=2*delims=“%%A IN('REG QUERY“HKLM\SOFTWARE\Notepad++”)中的,请设置NPPPath=“%%B\plugins\api” ::回显NPPPath为%NPPPath% 设置BITNESS=“三十二”
转到CopyAPIFile

显然,它与在64位操作系统上安装MBAM有关,它安装在“Program Files(x86)”文件夹中。这是我的同伴对我说的,他使用的是64位操作系统,并且在脚本中出现了错误。MBAM的密钥是HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Malwarebytes的反恶意软件,但我只是将文件上的行更改为该注册表项似乎对他也不起作用,installpath没有设置为变量。显然,它与在64位操作系统上安装MBAM有关,它安装在“Program Files(x86)”文件夹中。这是我的同伴对我说的,他使用的是64位操作系统,并且在脚本中出现了错误。MBAM的密钥是HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Malwarebytes的反恶意软件,但我只是将文件上的行更改为该reg密钥似乎对他也不起作用,installpath未设置为变量。这并不能回答问题。若要评论或要求作者澄清,请在其帖子下方留下评论-你可以随时对自己的帖子发表评论,一旦你有足够的评论,你就可以发表评论。这并不能回答问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论-你可以随时对自己的帖子发表评论,一旦你有足够的评论