循环通过 win 7 注册表查找键的值



在前面的一个问题中,我需要编辑win 7注册表项中的值(REG ADD-无效语法)。现在我需要循环浏览Profiles来找到一个特定的键,其中子键的值是字符串"Network"。

注册表如下所示:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles\使用这些子密钥:

{1C2A5700-E8E8-41C0-9684-6FB69FA73888}

配置文件名称REG_SZ SomethingElse

{7AA5E1AE-2408-4B92-9C56-8962CD9E926C}

配置文件名称REG_SZ网络

这是我的注册命令

reg query "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionNetworkListProfiles" /s /v ProfileName

我想找到子关键字"ProfileName"等于"Network"的keyname。我知道我将不得不使用FOR循环,但我知道如何做到这一点。

我的最终结果应该返回keyname{7AA5E1AE-2408-4B92-9C56-8962CD9E926C}

任何帮助都将不胜感激。

这样的东西可能会有所帮助:

@echo off    
reg query "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionNetworkListProfiles" /d /f "Network" /s /e
pause

我还没有测试过它,但通过下面的细节,我推测它应该能达到要求。

编辑

正在单独提取子密钥名称。。。

@echo off
reg query "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionNetworkListProfiles" /d /f "Network" /s /e > result.txt
for /f "tokens=1*delims=:" %%i in ('findstr /n "^" result.txt') do if %%i equ 2 echo %%~nj
del /q result.txt
pause
@ECHO off
SETLOCAL EnableDelayedExpansion
SET "NTKEY=HKLMSOFTWAREMicrosoftWindows NTCurrentVersion"
SET "PROFKEY=%NTKEY%NetworkListProfiles"
GOTO main
:findprof
SET "profname=%~1"
SET "presult=%~2"
FOR /f "tokens=1,3 delims={} " %%I in (
       'reg.exe query "%PROFKEY%" /s /v ProfileName') DO (
    SET "tmp=%%I"
    IF "!tmp:~0,19!" == "HKEY_LOCAL_MACHINE" (
        SET "tresult=%%J"
    ) ELSE IF "%%J" == "%profname%" (
        SET "%presult%={!tresult!}"
        EXIT /B 0
    )
)
EXIT /B 1
:usage
(
    ECHO The syntax of this command is:
    ECHO. 
    ECHO     %1 profile_name
) 1>&2
GOTO :eof
:main
SET "profname=%~1"
IF NOT DEFINED profname (
    CALL :usage %~nx0
    EXIT /B 1
)
CALL :findprof %profname% result
IF errorlevel 1 (
    ECHO Profile not found.
) 1>&2 ELSE (
    ECHO %result%
)

findprof子例程中的循环在空格和花括号上标记reg.exe输出的每一行。如果第一个令牌以"HKEY_LOCAL_MACHINE\"开头,则会将当前密钥名称设置为第三个令牌。然后,如果在接下来的一行中,第三个令牌与目标配置文件名称匹配,它会通过将当前密钥名称设置为输出参数的传入名称来"返回"当前密钥名称(这有点像按引用传递)。根据需要设置错误级别,并将错误输出打印到stderr

示例:

C:>findprof        
The syntax of this command is:
    findprof.bat profile_name
C:>findprof spam
Profile not found.
C:>findprof Network
{7AA5E1AE-2408-4B92-9C56-8962CD9E926C}

最新更新