Programming Field

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

[Windows NT系/XP 以降] レジストリのキーや値の追加や書き換えを行います。Regの操作の1つです。

このページではWindowsのレジストリを書き換えることができるコマンドを扱っています。レジストリにはWindowsの重要な設定も含まれているため、レジストリに対する操作は慎重に行ってください。レジストリの操作にあまり慣れていないときは事前のバックアップを強く推奨します。また、不用意にいろいろなデータの書き換えを行うとWindowsが正常に起動しなくなる原因となります。なお、このページにある内容を利用して生じた問題の責任は負いかねます。

構文

reg[.exe] add <key> [/v <var-name> | /ve]
    [/t <type>] [/s <separator>] [/d <data>]
    [/f] [/reg:[32|64]]

オプション一覧

<key>

キー名を指定します。具体的な指定方法は「キー名の指定方法について」をご覧ください。

なお、キー名は完全パスで指定しますが、途中のサブキーが存在しない場合はすべて作成されます。そのため、特定のキーを作成したい場合はそのキー名を含むフルパスをここで指定することで作成することができます。

/v <var-name> | /ve

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

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

なお、どちらも省略した場合は「/ve」を指定した場合と同じ挙動となります。

※ この仕様のため、新たなキーを作成する際「既定」の値を「値の設定なし」とすることはできません。「既定」の値を置きたくない場合は「Reg Delete」で消す必要があります。

/t <type>

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

なお、このオプションを省略した場合は「REG_SZ」が指定されたものとして扱います。

/s <separator>

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

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

/d <data>

値を追加する際の中身(データ)を指定します。

値の種類が「REG_DWORD」(4)、「REG_DWORD_BIG_ENDIAN」(5)、および「REG_QWORD」(11)である場合は、<data> には10進数の整数か、「0x」を先頭につけた16進数の整数を指定します。

値の種類が「REG_SZ」(1)、「REG_EXPAND_SZ」(2)、および「REG_MULTI_SZ」(7)である場合は、<data> には文字列を指定します。「REG_EXPAND_SZ」に設定する値は通常「%」文字を含めるため、コマンドライン/バッチファイル上では「^」文字を用いて「%」が環境変数を展開する「%」として扱われないようにする必要があります。なお、「" "」は自動的にそのペアが除去されるため、「"」を値の文字として含めたい場合は「"""」と3文字連続で指定する必要があります。

※ 「REG_DWORD_BIG_ENDIAN」で値を設定すると「レジストリ エディター」とバイトオーダーが異なる結果となります。例えばReg Addで「REG_DWORD_BIG_ENDIAN」の値「1000」(0x3E8)を設定すると、Reg Addはバイナリデータで「E8 03 00 00」という値を設定しますが(これが誤り?)、これをレジストリ エディターで表示すると「3892510720」(0xE8030000)という結果になります。(Windows 10 Build 14393 で確認)

/f データが既に存在する場合は上書き(書き換え)を行います。/f を省略した場合、既に同じ名前の値が存在すると上書きするかどうかのプロンプトを表示します。
/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 Add使用例

Regの「ADD」コマンドはレジストリ内の値を作成、または書き換える際に用います。単純に値を書き換える場合でも「ADD」コマンドを使用します。

/f オプションを指定して値を作成・書き換える場合は、既に値が存在する場合に書き換えるかどうかのプロンプトを表示しません。書き換えた値は元に戻すことができないため、書き換えようとしている値が何か把握していない状況で使うと予期しないトラブルの原因となる可能性があります。その場合は事前に「SAVE」「EXPORT」などを行ってバックアップすることをお勧めします。

サンプル1

reg add "HKCU\Software\My Company\MyApp" /v StartupPath /d "%CD%"

[拡張構文] 「HKEY_CURRENT_USER\Software\My Company\MyApp」キーの中にある値「StartupPath」を現在のディレクトリに設定します。

サンプル2

reg add HKCU\Software\Classes\MyFileType\DefaultIcon /ve /f /t REG_EXPAND_SZ /d ^%SystemRoot^%\System32\imageres.dll,17

「HKEY_CURRENT_USER\Software\Classes\MyFileType」以下の「DefaultIcon」キーにおける「既定の値」に「%SystemRoot%\System32\imageres.dll,17」という値を設定します。環境変数の指定をコマンドライン上で展開せずに値としてセットするため、種別を「REG_EXPAND_SZ」とし、コマンドライン上で「%」が解析されないように「^」文字を利用して指定しています。なお、「/f」オプションがあるため既に値が設定されていてもそれを上書きします。

※ バッチファイルで使う場合は「^%」ではなく「%%」と書く必要があります。
※ コマンドラインで「^%」を使う場合は「" "」で囲うことができません(^ 文字がそのまま書き込まれてしまいます)。そのため、スペース文字を含みたい場合はバッチファイルから実行する必要があります。

関連項目