Loop (레지스트리)
지정된 레지스트리 서브키의 내용을 한 번에 하나씩 열람합니다.
Loop, Reg, RootKey[\Key, Mode] ; v1.1.21+ (추천)
Loop, RootKey [, Key, IncludeSubkeys?, Recurse?]
매개변수
- Reg [v1.1.21+]
문자 그대로의 단어
Reg
(대소문자 구분). 이것은 변수 또는 표현식이 되면 안 됩니다. 이 키워드가 존재하면, Key는 반드시 쉼표 대신에 정사선으로 RootKey와 분리해야 합니다. 둘 모두 하나의 변수에 담길 수 있습니다. 예를 들어,Loop, Reg, HKLM\Software
또는Loop, Reg, %FullPathOfKey%
.- RootKey
HKEY_LOCAL_MACHINE (HKLM), HKEY_USERS (HKU), HKEY_CURRENT_USER (HKCU), HKEY_CLASSES_ROOT (HKCR), 또는 HKEY_CURRENT_CONFIG (HKCC) 중 하나가 되어야 합니다.
원격 레지스트리에 접근하려면, 컴퓨터 이름과 쌍점을 앞에 배치하십시오. 다음 예제와 같이:
\\workstation01:HKEY_LOCAL_MACHINE
- Key
키의 이름 (예, Software\SomeApplication). 비어 있거나 생략하면, RootKey의 내용이 열람됩니다.
- Mode [v1.1.21+]
다음 기호로 구성됩니다:
K
: 키를 포함합니다.
V
: 값을 포함합니다. K와 V를 모두 생략하면 값들도 포함됩니다.
R
: 하위키로 재귀해 들어갑니다. R이 생략되면, Key의 하위키의 키와 값은 포함되지 않습니다.- IncludeSubkeys?
0 (기본값) Key 안에 포함된 하위키는 열람하지 않습니다 (오직 값만 열람합니다).
1 모든 값들과 하위키를 열람합니다.
2 하위키만 열람합니다 (값은 열람하지 않습니다).- Recurse?
- 0 (기본값) 하위키에 재귀하지 않습니다.
1 하위키에 재귀해 들어갑니다. 그래서 그 안에 포함된 모든 값과 키를 열람합니다.
논평
레지스트리-회돌이는 레지스트리 값 또는 하위키의 집단을 한 번에 하나씩 처리하고 싶을 때 유용합니다. 값과 하위키는 역순으로 (아래에서 위로) 열람되므로 회돌이를 방해하지 않고 회돌이 안에 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 매개변수를 통하여) 원격 레지스트리에 접근할 때, 다음 사항이 적용됩니다:
- 목표 머신은 원격 레지스트리 서비스를 실행하고 있어야 합니다.
- 목표 컴퓨터가 여러분의 도메인과 같은 도메인에 있지 않다면 또는 지역이나 원격 사용자이름이 충분한 권한이 없다면 원격 레지스트리 접근은 실패할 수 있습니다 (그렇지만, 가능한 해결책은 아래를 참조하십시오).
- 사용자이름의 도메인, 작업그룹, 그리고/또는 권한에 따라, 원격 레지스트리 접근을 시도하기 전에, 먼저 드라이브를 맵핑하거나 함으로써, 공유 장치에 접속할 필요가 있습니다. 그런 식으로 접속하면 -- 레지스트리에 접근하거나 편집할 수 있는 권한이 있는 원격 사용자이름과 암호를 사용하여 접속하면 -- 원격 레지스트리 접근이 활성화되는 부작용이 있을 수 있습니다.
- 이미 목표 컴퓨터에 다른 사용자로 접속했다면 (예를 들어, 사용자 Guest를 통하여 맵 드라이브에 접속했다면), 접속을 끊어서 원격 레지스트리 특징에 다시 접속해 여러분의 현재 로그-온 사용자이름으로 재-인증받을 필요가 있습니다.
- Windows Server 2003 그리고 Windows XP Professional에 대하여, MSDN이 언급한 바에 의하면: "[레지스트리 서버] 컴퓨터가 작업그룹에 참여하고 로컬 계정을 사용하는 네크워크 로그온 사용자를 강제로 Guest로 인증받게 하는 정책이 활성화되어 있다면, 그 기능은 실패합니다. 컴퓨터가 작업그룹에 참여한다면 이 정책이 기본값으로 활성화되어 있는지 확인 하십시오."
- Windows XP Home Edition에 대하여, MSDN이 언급한 바에 의하면 "이 기능은 언제나 실패합니다". Home Edition은 레지스트리 서버도 클라이언트도 없습니다. 물론 클라이언트는 OS cab 파일 중에서 추출할 수 있습니다.
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