在前面的一个问题中,我需要编辑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}