Programming Field

Reg - DOS コマンド一覧

スポンサーリンク

[Windows NT系/XP 以降] レジストリの値の取得や変更など、レジストリに関する操作全般を行います。

構文

reg[.exe] <operation> <parameters>
<operation>
レジストリに対する操作を指定します。以下のいずれかを指定します。
QUERY値の取得(出力)や値・キーの検索を行います。
ADD値やキーの追加・書き換えを行います。
DELETE値やキーの削除を行います。
COPY値やキーを丸ごと別の親キーにコピーします。
SAVE特定のキーとその中のデータをレジストリデータファイル(ハイブ)に書き出します。
RESTOREレジストリデータファイル(ハイブ)から指定のキーにファイル内のデータを展開(復元)します。
LOADレジストリデータファイル(ハイブ)をレジストリキーとして扱い、内部のキーやデータに直接アクセスできるようにします。
UNLOADLOAD で読み込んだレジストリデータファイル(ハイブ)のキーを閉じます(アンロードします)。
COMPARE指定のキー同士の中身を比較します。
EXPORT指定のキーとその中身を .reg ファイル(登録エントリファイル)に書き出します。
IMPORT.reg ファイル(登録エントリファイル)の内容をレジストリに登録します。
FLAGSHKEY_LOCAL_MACHINE\Software 以下のキーが持つ特殊なオプション(フラグ)の取得(出力)や変更を行います。
<parameters>
<operations> が利用するパラメーターを指定します。詳細はそれぞれの操作を説明したページをご覧ください。
なお、「REG IMPORT」を除くすべての操作は <parameters> の1番目にキー名を指定します。キー名の指定方法については解説をご覧ください。

解説

Regはプログラムに指定されたパラメーターに応じてレジストリの操作を行うプログラムです。GUIでレジストリ操作を行う「Regedit」(レジストリ エディター)に対し、こちらはコマンドライン・バッチファイルでレジストリ操作を行うのに適しています。

<operations> に指定する操作によって実行結果や必要なパラメーターが異なります。詳細は個々のページで紹介していますので以下のリンクをご覧ください。

※ 現在作成中です。

Regは以下の終了コードを返します。If Errorlevelなどを用いて処理を分岐させる際に使用できます。

0処理が成功しました。
1処理が失敗しました。(データが見つからない、権限が不足しているなど)
2(REG COMPAREのみ) 処理が成功しましたが、比較内容は不一致でした。

なお、エラーメッセージは標準出力(STDOUT)ではなく標準エラー出力(STDERR)に出力されます。各種リダイレクション(「>」など)やForコマンドを用いて標準出力を扱う場合、標準エラー出力が画面に出力されるのを避けるのであれば「2> NUL」などで抑制する必要があります。

キー名の指定方法について

「REG IMPORT」を除く各操作は <parameters> の1番目にキー名を指定します(「REG COPY」と「REG COMPARE」は2番目にも指定します)。キー名はフルパスで指定する必要があり、その書式は以下のようになります。

[\\<computer>\]<root-key>[\<key-path>]
<computer>
コンピューター名を指定します。権限がある場合、指定したコンピューターに対するレジストリの操作を行うことができます。ルートキーの前に「\\コンピューター名\」の書式で指定する必要があります。省略した場合はコマンドを実行しているコンピューターが利用されます。
※ コンピューター名がリモートのコンピューターを指す場合は、<root-key> には HKEY_LOCAL_MACHINE か HKEY_USERS のいずれかのみ使用することができます。
※ 一部のコマンドではコンピューター名を指定できないかローカルコンピューター限定となります(限定される場合については各コマンドページに注記しています)。
<root-key>
ルートキーの名前を指定します。HKLM や HKCU など、以下の名前が使用できます。3文字または4文字の省略した名称、HKEY_* の省略しない名称(実際のルートキーの名前)いずれも使用できます。
名前実際のルートキー説明
HKLMHKEY_LOCAL_MACHINE主にシステム全体に対する設定が含まれます。
HKCUHKEY_CURRENT_USER現在のセッションのユーザー(ログインユーザー)に対する設定が含まれます。HKEY_USERS 以下の対応するユーザーを指すサブキー以下の内容と一致します。
HKCRHKEY_CLASSES_ROOTファイルの関連付けやCOMなどで利用する設定が含まれます。HKEY_CURRENT_USER\Software\ClassesHKEY_LOCAL_MACHINE\Software\Classes を組み合わせた内容になります。
HKUHKEY_USERSシステムが把握している全ユーザーに対する設定が含まれます。
HKCCHKEY_CURRENT_CONFIG現在のハードウェア特有の設定が含まれます。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current 以下の内容と同じものとして扱われます。
HKEY_CURRENT_USER_LOCAL_SETTINGS、HKEY_DYN_DATA、HKEY_PERFORMANCE_DATA、HKEY_PERFORMANCE_NLSTEXT、HKEY_PERFORMANCE_TEXT の各ルートキーはRegでは利用できません。
<key-path>
サブキーの名前を指定する場合、ルートキーの後ろに「\」を置いてその直後に指定します。ファイル名のパスと同様に「a\b」などと「\」区切りで子キー・その中の孫キーなどを指定することができます。

ルートキーも含めると、指定するパスは「HKCU\Software\Microsoft」などのような形式となります。

値の種類について

「REG ADD」など一部の操作ではレジストリの値の種類を指定するオプションが存在します。そこで使用できる値の種類は、以下に挙げる種類の「定数名」または「数値」のいずれかで指定することができます(ただし括弧内の定数名は使用できません)。なお、「数値」は下表以外の値も入れることができますが、定義されていない種類はシステムやアプリケーションに無視される可能性があります。

定数名数値意味詳細
REG_NONE0未定義値主に値の存在そのものに意味がある場合に用いられます(あまり使用されません)。
REG_SZ1文字列通常の文字列を保持します。
REG_EXPAND_SZ2展開可能な文字列「%ENVNAME%」のように環境変数の名前を値に含めることができます。(※1)
REG_BINARY3バイナリーデータ文字列では表記できないデータを保持します。Regでは1バイトを2桁の16進数とし、16進表記の数値を区切り無しで繋げた表記を用います。(※2)
REG_DWORD
REG_DWORD_LITTLE_ENDIAN
432ビット数値(リトルエンディアン)扱うデータが(32ビットで納まる)数値であることが分かっている場合に用いられます(REG_BINARY でも代替できます)。Regでは「0x」で始まる値を16進数、それ以外を10進数として扱います。
REG_DWORD_BIG_ENDIAN532ビット数値(ビッグエンディアン)REG_DWORD のデータをビッグエンディアンで扱う場合に用います。「REG_DWORD」は「REG_DWORD_LITTLE_ENDIAN」と明示しなくてもリトルエンディアンとして扱われるため、ビッグエンディアンとしたい場合はこちらの種類を用いる必要があります。
(REG_LINK)6リンクリンク用として作成されたキーの参照先を保持する値に用いられます。(※3)
REG_MULTI_SZ7複数行文字列リストや配列など、複数の文字列を1つの値として保持する際に用いられます。(※4)
(REG_RESOURCE_LIST)8リソースマップ用のリソース一覧(詳細未調査; 主にハードウェア/ドライバーで用いられます。)(※5)
(REG_FULL_RESOURCE_DESCRIPTOR)9ハードウェア識別子用のリソース一覧(詳細未調査; 主にハードウェア/ドライバーで用いられます。)(※5)
(REG_RESOURCE_REQUIREMENTS_LIST)10リソースマップ用のリソース一覧(詳細未調査; 主にハードウェア/ドライバーで用いられます。)(※5)
REG_QWORD
(REG_QWORD_LITTLE_ENDIAN)
1164ビット数値(リトルエンディアン)扱うデータが32ビットを超える可能性があり、64ビットには納まる数値であることが分かっている場合に用いられます(REG_BINARY でも代替できます)。Regでは「0x」で始まる値を16進数、それ以外を10進数として扱います。なお、ビッグエンディアンに対応する種類はありません(Windows 10 Build 10586 時点)。

※1: 環境変数の展開は値を利用するアプリケーションが各自で行います。また、Regのコマンドラインで「REG_EXPAND_SZ」と「%」文字を用いる場合は、コマンドライン/バッチファイルで使用できる「%」文字と見なされないように「^」文字でのエスケープや「%%」などと重ねる表記(バッチファイルのみ)を用いる必要があります(「" "」内では「^」文字が効かないことにもご注意ください)。
※2: 値指定時、「12ABC」のように長さが奇数である場合、先頭に「0」を足したもの(「012ABC」)とみなしてバイナリーデータに変換します。
※3: 「REG_OPTION_CREATE_LINK」で作成されたキーが持つ値「SymbolicLinkValue」の種類として用います。この「SymbolicLinkValue」の値には「\REGISTRY\MACHINE」などから始まる絶対パスをUnicode文字列(UTF-16LE)で指定します。
※4: Regでは区切り文字として「\0」という文字(「\」と「0」の2文字で1区切り)を用います。ただし、各コマンドにあるオプションを指定することで別の区切り文字を用いることができます。
※5: レジストリ エディターでこれらの値の詳細を表示しようとするとクラッシュする可能性があります。