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
선택 | 내려받기