我正在嘗試閱讀下面的註冊表。它是列表類型,其子鍵的數目是未知的。讀取註冊表類型列表,當子密鑰數量未知
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Company\Domain\Config\Global\MACHINES_LIST\l1\C1
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Company\Domain\Config\Global\MACHINES_LIST\l1\C2
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Company\Domain\Config\Global\MACHINES_LIST\l1\C3
....等等。某些條目少於20 C1包含V1 = 132.198.122.1 C2包含V1 = 132.198.122.2 ....
下面是我努力了這麼久的代碼,但沒有幫助。
setlocal ENABLEEXTENSIONS
set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Company\Domain\Config\Global\MACHINES_LIST\l1
set VALUE_NAME=V1
set /a loopChk=1
set /a count=1
:LOOPSATCON
\t IF !loopChk! EQU 0 GOTO MOVE_OUT
\t FOR /F "tokens=1-3" %%A IN ('REG QUERY %KEY_NAME%\C!count! /v %VALUE_NAME% 2^>nul') DO (
\t \t \t set IP=%%C
\t \t \t set /a count=count+1
\t \t)
\t if defined ValueName (
\t \t @echo IP= %IP%
\t) else (
\t \t @echo %KEY_NAME%\%VALUE_NAME% not found.
\t \t set /a loopChk=0
\t)
\t GOTO LOOPSATCON
從 「答案」 傳輸
參考信息
不知怎的,我已成功地從存儲所有的C1,C2,C3 ...子鍵得到V1的價值。我將它們存儲在「ValueName」中並立即打印。但仍然沒有印刷。這是第一個腳本。謝謝你的幫助。 我是否再次犯了錯誤。 該語句正在執行「set ValueName = 172.16.121.73」,但該值仍未存儲。
set KEY_NAME=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Compnay\Domain\Config\Modality\Global\MACHINES_IP\l1
FOR /F "skip=1" %%a IN ('REG QUERY %KEY_NAME% 2^>nul') DO (
for /f "tokens=3" %%b in ('REG QUERY "%%a" ^| Find "V1"') do (
set ValueName=%%b
@echo Value Name = %ValueName%
)
if defined ValueName (
@echo Value Name = %ValueName%
)
)
你真的有問題嗎?直接顯而易見的兩個錯誤是,您正在使用'!loopchk!'而未調用'enabledelayedexpansion',因此「!loopchk!」將永遠不會等於「0」('!'應該是'%') - 對於'!count!'也是一樣的(在這種情況下,您需要使用'enabledelayedexpansion',否則這只是一個字符串,而不是' count'。你已經使用了'如果定義的ValueName'總是爲false,因爲你設置的是'Value_Name'而不是'ValueName',並且你似乎沒有在循環中的任何位置給它賦值 – Magoo