2015-04-06 39 views
1

在previuos問題中,我需要在win 7註冊表(REG ADD - Invalid syntax)中編輯密鑰中的值。現在我需要通過配置文件循環來找到一個特定的鍵,其中子鍵的值是字符串「Network」。循環贏得7註冊表以找到密鑰的值

註冊表如下: HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\的Windows NT \ CURRENTVERSION \ NetworkList \ Profiles文件\ 這些子項:

{1C2​​A5700-E8E8-41C0-9684-6FB69FA73888}

摘要名稱REG_SZ SomethingElse

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

摘要名稱REG_SZ網絡

這裏是我的reg命令

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\Profiles" /s /v ProfileName

我想找到其中的子項「PROFILENAME」等於「網絡」鍵名。 我知道我將不得不使用FOR循環,但我知道如何做到這一點。

我的最終結果應該返回鍵名{7AA5E1AE-2408-4B92-9C56-8962CD9E926C}

任何幫助將不勝感激。

+0

感謝eryksun了先進的答案,但我選擇了克里斯的答案,因爲它是更小的解決方案,我加入這一個已經很大腳本。兩個優秀的答案,如果我有足夠的代表點我會upvote兩個。 –

+0

我把它編碼爲'findprof'子程序,你可以放入任何腳本和'CALL:findprof%profname%result'中。其餘的只是爲了完整。 – eryksun

+0

我第一次寫的是Chris,但是我決定不要通過所有關鍵字的強力搜索來獲取數據「Network」的任何值。此外,如果我是你,我會避免使用臨時文件,特別是不使用像「結果」這樣的通用名稱創建的文件。txt「,臨時文件應該在'%TEMP%'中創建,並且使用'%RANDOM%'創建名稱時循環,直到名稱是唯一的。 – eryksun

回答

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 
+0

感謝Chris。 {7AA5E1AE-2408-4B92-9C56-8962CD9E926C}但是我怎樣才能得到這個關鍵字? –

+0

對不起,我忘了那部分,看看我的編輯...如果我是你,還可以看看eryksun的回答一個有趣而先進的方法被提議。:) –

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}