我想检查某个注册表项是否存在,如果存在,请检查其值
如果它等于0(例如),则写入log:not found 如果它等于1(例如),则写入log:found
我应该坚持使用reg查询,如果结构或是否有更简单的方法?
答案 0 :(得分:2)
可以使用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
reg - 读取,设置或删除注册表项和值,从.REG文件保存和恢复。
An A-Z Index of the Windows CMD command line是与Windows cmd相关的所有内容的绝佳参考。
答案 1 :(得分:0)
不幸的是,我还没有找到检查该值是否正确的正确方法。您可以使用FOR循环和tokens =来定位值并进行比较,但是当REG QUERY返回的令牌数量超出预期时,会发生什么?在两个简单的REG QUERY中,使用FIND都会失败。在FOR循环中查找并查找,因为它总是返回超出一级的错误%ERRORLEVEL%。即使使用DelayedExpansion,它似乎最终也会失败。