想用批处理,reg query 做一个注册表查询功能,但是写了一段代码后,查询结果一直不对。请问有大~佬,帮忙指导一下嘛??或者
功能简介
1、用户输入补丁号 ,确定后
2、先查询注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages,存在Package_for_的项

3、从步骤2的结果中,继续根据补丁号查询,存在补丁号(如KB5012170),输出对应的注册表。这里遇到问题,有时可以有时不可以

4、如果步骤3没有查询到,继续查询步骤2的注册表项中的字段InstallLocation的值,如果包含用户输入的补丁号,输出注册表。如果没查到,提示用户:没有查询到。这里遇到问题,输入存在的补丁(KB5033920),一直查询不到

问题截图
步骤3:输入存在的补丁号,也查不到

步骤4:输入存在的补丁号,通过字段:InstallLocation,也查不到

bat脚本:
@echo off
:loop
echo 获取已安装补丁的注册表
set /p userInput=请输入补丁号:
echo ---输入内容---: %userInput%
setlocal enabledelayedexpansion
rem set KBnum="kb5034767"kb5034862---KB5012170---KB5034123
set KBnum=%userInput%
for /f "tokens=*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages" ^| find "Package_for_"') do (
set key=%%a
echo !key! | findstr "%KBnum%" >nul
if !errorlevel! equ 0 (
echo 第一次查询,命中%KBnum%
goto queryKBNum
) else (
echo 第一次查询,没有命中%KBnum%
goto queryKBInstallLocationNum
)
)
:queryKBNum
echo 第一次查询,已找到补丁%KBnum%的注册表为:%key%
goto loop
:queryKBInstallLocationNum
echo queryKBInstallLocation: %key%
set key2=!key!
rem echo KBrum:%KBnum%
set "value=InstallLocation"
set "searchName=kb5034767"
for /f "tokens=2*" %%a in ('reg query "%key2%" /v "%value%" ^| findstr /i "%KBnum%"') do (
echo 第二次查询,命中:%KBnum%
echo 第二次查询,补丁%KBnum%的安装注册表为:%key%
echo %value%: %%b
)
goto loop
PAUSE&exit