在previuos问题中,我需要在win 7注册表(REG ADD - Invalid syntax)中的密钥中编辑一个值。现在我需要循环通过配置文件来查找特定的键,其中子键的值是字符串“Network”。
注册表如下所示: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ NetworkList \ Profiles \ 使用这些子项:
{1C2A5700-E8E8-41C0-9684-6FB69FA73888}
ProfileName REG_SZ SomethingElse
{7AA5E1AE-2408-4B92-9C56-8962CD9E926C}
ProfileName REG_SZ网络
这是我的reg命令
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles" /s /v ProfileName
我想找到子键“ProfileName”等于“Network”的键名。 我知道我将不得不使用FOR循环,但我知道如何做到这一点。
我的最终结果应该返回关键字{7AA5E1AE-2408-4B92-9C56-8962CD9E926C}
非常感谢任何帮助。
答案 0 :(得分:0)
这样的事情可能有所帮助:
@echo off
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles" /d /f "Network" /s /e
pause
我还没有对它进行测试,但是通过遵循this中的详细信息,我猜测它应该执行所需要的。
修改强>
单独提取子项名称...
@echo off
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles" /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
答案 1 :(得分:0)
@ECHO off
SETLOCAL EnableDelayedExpansion
SET "NTKEY=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
SET "PROFKEY=%NTKEY%\NetworkList\Profiles"
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}