지정된 레지스트리 서브키의 내용을 한 번에 하나씩 열람합니다.
Loop, Reg, RootKey[\Key, Mode] ; v1.1.21+ (추천)
Loop, RootKey [, Key, IncludeSubkeys?, Recurse?]
문자 그대로의 단어 Reg (대소문자 구분). 이것은 변수 또는 표현식이 되면 안 됩니다. 이 키워드가 존재하면, Key는 반드시 쉼표 대신에 정사선으로 RootKey와 분리해야 합니다. 둘 모두 하나의 변수에 담길 수 있습니다. 예를 들어, Loop, Reg, HKLM\Software 또는 Loop, Reg, %FullPathOfKey%.
HKEY_LOCAL_MACHINE (HKLM), HKEY_USERS (HKU), HKEY_CURRENT_USER (HKCU), HKEY_CLASSES_ROOT (HKCR), 또는 HKEY_CURRENT_CONFIG (HKCC) 중 하나가 되어야 합니다.
원격 레지스트리에 접근하려면, 컴퓨터 이름과 쌍점을 앞에 배치하십시오. 다음 예제와 같이: \\workstation01:HKEY_LOCAL_MACHINE
키의 이름 (예, Software\SomeApplication). 비어 있거나 생략하면, RootKey의 내용이 열람됩니다.
다음 기호로 구성됩니다:
K: 키를 포함합니다.
V: 값을 포함합니다. K와 V를 모두 생략하면 값들도 포함됩니다.
R: 하위키로 재귀해 들어갑니다. R이 생략되면, Key의 하위키의 키와 값은 포함되지 않습니다.
0 (기본값) Key 안에 포함된 하위키는 열람하지 않습니다 (오직 값만 열람합니다).
1 모든 값들과 하위키를 열람합니다.
2 하위키만 열람합니다 (값은 열람하지 않습니다).
레지스트리-회돌이는 레지스트리 값 또는 하위키의 집단을 한 번에 하나씩 처리하고 싶을 때 유용합니다. 값과 하위키는 역순으로 (아래에서 위로) 열람되므로 회돌이를 방해하지 않고 회돌이 안에 RegDelete를 사용할 수 있습니다.
다음 변수들이 레지스트리-회돌이 안에 존재합니다. 내부 레지스트리-회돌이가 외부 레지스트리-회돌이 안에 싸여 있다면, 내부 회돌이의 레지스트리 항목이 우선 순위를 갖습니다:
| A_LoopRegName | 현재 열람된 항목의 이름. 값 이름 또는 하위키의 이름 중 하나입니다. 값 이름에 값이 할당되어 있으면 Windows RegEdit이 "(Default)"로 보여주는 값 이름이 열람됩니다. 그러나 A_LoopRegName는 값 이름에 대하여 비워집니다. |
| A_LoopRegType | 현재 열람된 항목의 유형, 다음 단어 중 하나입니다: KEY (즉, 현재 열람된 항목은 값이 아니라 하위키입니다), REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD, REG_QWORD, REG_BINARY, REG_LINK, REG_RESOURCE_LIST, REG_FULL_RESOURCE_DESCRIPTOR, REG_RESOURCE_REQUIREMENTS_LIST, REG_DWORD_BIG_ENDIAN (아마도 대부분의 윈도우즈 하드웨어에서는 보기 힘들 것입니다). 현재 열람된 항목이 미지의 유형이면 비어 있습니다. |
| A_LoopRegKey | 접근 중인 루트 키의 이름 (HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT, 또는 HKEY_CURRENT_CONFIG). 원격 레지스트리 접근을 위하여, 이 값은 컴퓨터 이름을 포함하지 않습니다. |
| A_LoopRegSubKey | 현재 SubKey의 이름. 이 키는 Key 매개변수와 같습니다. 단, Recurse 매개변수가 재귀적으로 다른 하위키들을 탐험하는 데 사용중이면 예외입니다. 그런 경우라면, 현재 열람된 항목의 전체 경로입니다. 루트 키를 포함하지 않습니다. 예를 들어: Software\SomeApplication\My SubKey |
| A_LoopRegTimeModified | 현재 하위키 또는 그의 값이 마지막으로 변경된 시간. 형식은 YYYYMMDDHH24MISS입니다. 이 변수는 현재 열람된 항목이 하위키가 아니면 비어 있습니다 (즉, A_LoopRegType는 단어 KEY가 아닙니다). |
레지스트리-회돌이 안에서 사용될 때, 다음 명령어들을 사용하면 현재 열람된 항목을 처리해야 할지 말지 간단하게 알려줄 수 있습니다:
| RegRead, OutputVar | 현재 항목을 읽습니다. 현재 항목이 키이면, ErrorLevel에 1이 설정되고 OutputVar는 비워집니다. |
| RegWrite [, Value] | 현재 항목을 씁니다. Value를 생략하면, 항목은 그의 유형에 따라 0이 되거나 비워집니다. 현재 항목이 키이면, ErrorLevel은 1이 설정되고 다른 효과는 전혀 없습니다. |
| RegDelete | 현재 항목을 삭제합니다. 현재 항목이 키이면, 그의 서브키 그리고 그 안에 포함된 값까지 함께 삭제됩니다. |
(위에 기술된 RootKey 매개변수를 통하여) 원격 레지스트리에 접근할 때, 다음 사항이 적용됩니다:
Blocks, Break, Continue, 그리고 A_Index 변수 (모든 회돌이에 존재)에 관한 더 자세한 정보는 Loop를 참조하십시오.
Loop, Break, Continue, 블록, RegRead, RegWrite, RegDelete, SetRegView
; 예제: 사용자가 타자한 인터넷 익스플로러의 URL 이력을 삭제합니다:
Loop, HKEY_CURRENT_USER, Software\Microsoft\Internet Explorer\TypedURLs
RegDelete
; 예제: 작동하는 테스트 스크립트:
Loop, Reg, HKEY_CURRENT_USER\Software\Microsoft\Windows, KVR
{
if a_LoopRegType = key
value =
else
{
RegRead, value
if ErrorLevel
value = *error*
}
MsgBox, 4, , %a_LoopRegName% = %value% (%a_LoopRegType%)`n`nContinue?
IfMsgBox, NO, break
}
; 예제: 전체 레지스트리에서 특정 값을
; 재귀적으로 열람하는 예제.
SetBatchLines -1 ; 최대 속도로 검색합니다.
RegSearchTarget = Notepad ; 서브루틴에 무엇을 검색하고 싶은지 알립니다.
Gosub, RegSearch
return
RegSearch:
ContinueRegSearch = y
Loop, Reg, HKEY_LOCAL_MACHINE, KVR
{
Gosub, CheckThisRegItem
if ContinueRegSearch = n ; 멈추어야 합니다.
return
}
Loop, Reg, HKEY_USERS, KVR
{
Gosub, CheckThisRegItem
if ContinueRegSearch = n ; 멈추어야 합니다.
return
}
Loop, Reg, HKEY_CURRENT_CONFIG, KVR
{
Gosub, CheckThisRegItem
if ContinueRegSearch = n ; 멈추어야 합니다.
return
}
; 주의: HKEY_USERS를 검색 중이라면
; HKEY_CURRENT_USER는 검색할 필요가 없다고 필자는 믿습니다.
; 마찬가지로 HKEY_LOCAL_MACHINE를 검색 중이라면.
; HKEY_CLASSES_ROOT도 검색할 필요가 없을 것입니다.
return
CheckThisRegItem:
if A_LoopRegType = KEY ; 키 이름도 점검하고 싶다면 다음 두 줄을 제거하십시오.
return
RegRead, RegValue
if ErrorLevel
return
IfInString, RegValue, %RegSearchTarget%
{
MsgBox, 4, , The following match was found:`n%A_LoopRegKey%\%A_LoopRegSubKey%\%A_LoopRegName%`nValue = %RegValue%`n`nContinue?
IfMsgBox, No
ContinueRegSearch = n ; 호출자에게 검색을 멈추라고 알립니다.
}
return