检查是否存在注册表项+值,如果存在,请记录它

时间:2016-02-17 13:25:58

标签: batch-file

我想检查某个注册表项是否存在,如果存在,请检查其值

如果它等于0(例如),则写入log:not found 如果它等于1(例如),则写入log:found

我应该坚持使用reg查询,如果结构或是否有更简单的方法?

2 个答案:

答案 0 :(得分:2)

如何检查Windows注册表中是否存在密钥

可以使用reg query key

来完成
  • 此命令将设置%errorlevel%

  • errorlevel=0表示密钥存在。

  • errorlevel=1表示密钥不存在。

批处理文件示例

@echo off
Set mykey="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"^
^ "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"^
^ "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"^
^ "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices"^
^ "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices"^
^ "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options"^
^ "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"^
^ "HKEY_LOCAL_MACHINE\SOFTWARE\Hackoo"

Set LogFile=logkey.txt
If Exist %LogFile% Del %LogFile%

For %%K in (%mykey%) Do Call :Check_Key %%K %LogFile%
Start "" %LogFile%
Exit /b

:Check_Key
reg QUERY %1 >nul 2>&1
(
    if %errorlevel% equ 0 ( echo %1 ===^> Found && reg QUERY %1 
        ) else ( echo %1 ===^> Not found 
    )
) >>%2 2>&1

进一步阅读

答案 1 :(得分:0)

不幸的是,我还没有找到检查该值是否正确的正确方法。您可以使用FOR循环和tokens =来定位值并进行比较,但是当REG QUERY返回的令牌数量超出预期时,会发生什么?在两个简单的REG QUERY中,使用FIND都会失败。在FOR循环中查找并查找,因为它总是返回超出一级的错误%ERRORLEVEL%。即使使用DelayedExpansion,它似乎最终也会失败。