Programming Field

Reg Query - DOS/コマンドプロンプト コマンド一覧

[Windows NT系/XP 以降] レジストリのキーや値の検索・取得(照会)を行い、結果を出力します。Regの操作の1つです。

構文

reg[.exe] query <key> [/v <var-name> | /ve] [/s]
    [/f <data> [/k] [/d] [/c] [/e]] [/t <type>]
    [/z] [/se <separator>] [/reg:[32|64]]

オプション一覧

<key> キー名を指定します。具体的な指定方法は「キー名の指定方法について」をご覧ください。
/v <var-name> | /ve

「/v <var-name>」を指定した場合は、<var-name> に取得したい値の名前を指定します。名前は単体の名前である必要があり、パス名を含めることはできません(パスは <key> に含めます)。

「/ve」を指定した場合は、指定したキーにある「既定」(または「標準」、無名)の値の取得を行います。

/s 値やキーを検索(取得)する際、<key> の中にサブキーがあればその中(およびその下すべて)も検索対象に含めます。
/f <data> [/k] [/d]

<data> を用いて値の検索を行います。検索対象は以下のように指定したオプションによって変わります。

指定したオプション検索対象
/k のみ指定<data> を一部に持つキー名
/d のみ指定<data> をデータの一部に持つ値
/k と /d 両方を指定<data> を一部に持つキー名と、<data> をデータの一部に持つ値
/k と /d いずれも未指定<data> を一部に持つキー名と、<data> を名前またはデータの一部に持つ値

なお、/e オプションを使用していない場合、<data>ワイルドカードの構文を利用することができます。ただし部分一致になるため、「特定の文字で始まるもの」といった指定はできません。

/c
<data> に文字列を指定した際、その大文字・小文字を区別して検索します。指定しなかった場合は区別せずに検索します。
※ レジストリは通常キー名と値名の大文字・小文字を区別しません。
/e 検索時、<data> に完全に一致するもののみがヒットするようにします(上記の「<data> を一部に持つ」が「<data> と一致する」といった意味になります)。
/t <type>

検索する値の種類を指定(制限)します。<type> には値の種類を表すものを指定できます。指定できる内容は「値の種類について」をご覧ください。

なお、このオプションを指定すると、「/f <data>」のみ指定されており「/k」と「/d」が無い場合は「<data>」を含む(「/e」がある場合は完全一致する)値を検索します。また、/t があり「/f <data>」指定時に「/k」または「/d」が指定されていると、「/f」「/k」「/d」の効果が失われます(「/f」指定がない場合と同じ効果になります)。

※ 「/t」があり、「/f <data>」で値のデータにヒットした場合、なぜかヒット数が2倍されます。そのこともあり、「/t」と「/f」両方を含んだ場合の挙動の違いは一部バグである可能性があります。

/z 値の一覧を表示する際、値の種類にその種類を示す数値を合わせて表示します。
/se <separator>

種類が「REG_MULTI_SZ」(7)である値を表示する際、その区切り文字として使用する文字を指定します。<separator> にはその文字を1文字だけ指定します。

このオプションを指定しなかった場合は「\0」の2文字を区切り文字として使用します(「\0」は <separator> に指定できません)。

/reg:[32|64]

64ビット版と32ビット版(WOW64)の環境がある場合、「/reg:32」を指定すると32ビット版アプリケーションが使用するレジストリデータ(HKLMの場合は「HKLM\Software\WOW6432Node」以下など)、「/reg:64」を指定すると64ビット版アプリケーションが使用するレジストリデータを参照します。

なおこのオプションを省略した場合は、実行されるReg.exeが64ビット版であれば64ビット版、32ビット版(%SystemRoot%\SysWOW64 以下にあるもの)であれば32ビット版のレジストリを参照します。何らかのアプリケーションのレジストリデータを参照する場合は、そのアプリケーションの32ビット/64ビットが分かっているのであれば明示的にこのオプションを指定して曖昧さを回避することができます。

※ Reg.exeが32ビット版であっても「/reg:64」によって64ビット版のレジストリを参照することができます。
※ 64ビット版Reg.exeであれば、32ビット版のレジストリを参照する際に直接「HKLM\Software\WOW6432Node」以下などのキーを指定することも可能です。

解説

Regの「QUERY」コマンドはレジストリ内の値を表示・取得、または検索する際に用います。「reg query」をそのまま実行すると値の情報を画面に出力するのみであり、レジストリエディターを用いる方が確認が容易である可能性がありますが、「reg query」とForコマンドの拡張構文を組み合わせるなどでレジストリの値を環境変数に入れることなどが可能になるため、レジストリの値をバッチ処理に利用する際によく用いられます。

なお、「QUERY」コマンドはレジストリのキーや値を変更・削除しません。

サンプル1

reg query "HKCU\Software\My Company\MyApp" /v Version

「HKEY_CURRENT_USER\Software\My Company\MyApp」キーの中にある値「Version」を出力します。値が見つかった場合、以下のような出力になります。

HKEY_CURRENT_USER\Software\My Company\MyApp
    Version    REG_SZ    1.1.0.27

サンプル2 (バッチファイル)

for /f "tokens=1,2*" %%1 in ('reg query "HKCU\Software\My Company\MyApp" /v Version') do if "%%1"=="Version" set APP_VERSION=%%3

[拡張構文] Forコマンドを利用して、サンプル1と同様に取得した値を環境変数「APP_VERSION」に設定しています。

※ 「reg query」の出力は複数行に渡るため、Ifコマンドを用いて最初のトークンが「Version」となっている行から値を取り出すようにする必要があります。また、取り出した値にスペースが含まれている可能性もあるため、Forの「tokens」指定に「残りの文字列全て」を表す「*」が必要になります。
※ 値の名前にスペースが含まれている場合は、そのスペース部分でトークンが分割されてしまうため、上記の構文をそのまま用いることができません。

関連項目