reg - レジストリを操作する
regコマンドは、Windows のレジストリを操作するコマンドです。レジストリエディター(regedit)で行うキーや値の確認・追加・変更・削除を、コマンドプロンプトやバッチファイルから実行できます。
設定変更を自動化したい、複数のパソコンに同じ設定を配りたい、といった場面で役立ちます。
レジストリを誤って変更すると、Windows やアプリケーションが正常に動作しなくなることがあります。変更や削除の前には、必ずreg exportでバックアップを取りましょう。
レジストリの基本
レジストリは、Windows やアプリケーションの設定を保存しているデータベースです。フォルダーのようなキーと、その中に保存される値(名前・種類・データ)で構成されています。
regコマンドでは、キーを次のようなパスで指定します。
HKEY_CURRENT_USER\Software\MyApp
先頭の部分(ルートキー)は、次の略称が使えます。
| 略称 | 正式名称 | 内容 |
|---|---|---|
HKLM | HKEY_LOCAL_MACHINE | パソコン全体に適用される設定 |
HKCU | HKEY_CURRENT_USER | 現在のユーザーだけに適用される設定 |
HKCR | HKEY_CLASSES_ROOT | ファイルの関連付けなど |
HKU | HKEY_USERS | すべてのユーザーの設定 |
HKCC | HKEY_CURRENT_CONFIG | 現在のハードウェア構成 |
HKCUは現在のユーザーの設定なので、通常の権限でも書き換えられます。一方、HKLMへの書き込みには管理者権限が必要です。権限が足りないと「アクセスが拒否されました」と表示されます。詳しくは関連記事を参照してください。
regコマンドの基本構文
reg <操作> <キー名> [オプション]
操作には次のものがあります。この記事では、よく使うquery・add・delete・export・importを中心に解説します。
| 操作 | 内容 |
|---|---|
query | キーや値を表示する |
add | キーや値を追加する(既存の値は確認後に上書き) |
delete | キーや値を削除する |
export | キーを.regファイルに書き出す |
import | .regファイルの内容をレジストリに取り込む |
copy | キーを別の場所にコピーする |
compare | 2 つのキーや値を比較する |
save / restore | キーをバイナリ形式のファイルに保存・復元する |
load / unload | 保存したハイブをレジストリに読み込む・アンロードする |
キー名や値の名前に空白が含まれる場合は、"HKCU\Software\My App"のように二重引用符(")で囲みます。
キーや値を表示する(reg query)
キーの内容を表示する
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
指定したキーの直下にある値と、サブキーが一覧表示されます。このキーには、サインイン時に自動起動するアプリが登録されています。
表示は「値の名前」「値の種類」「データ」の順に並びます。
特定の値だけを表示する
/vで値の名前を指定します。
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /v ProductName

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
名前の付いていない既定の値を表示するときは、/vの代わりに/veを指定します。
サブキーも含めて表示・検索する
/sを付けると、サブキーも含めてすべて表示します。/fと組み合わせると、文字列で検索できます。
reg query "HKCU\Software\MyApp" /s
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /s /f Chrome
query のオプション
| オプション | 内容 |
|---|---|
/v 名前 | 指定した名前の値だけを表示する |
/ve | 既定の値(名前なし)を表示する |
/s | サブキーも含めて再帰的に表示する |
/f 検索語 | 検索する文字列を指定する(既定は部分一致・大文字小文字を区別しない) |
/k | /fの検索対象をキー名だけにする |
/d | /fの検索対象をデータだけにする |
/c | 大文字小文字を区別して検索する |
/e | 完全に一致するものだけを検索する |
/t 種類 | 指定した種類の値だけを表示する |
値の種類
値には「種類」があり、reg addの/tで指定します。
| 種類 | 内容 |
|---|---|
REG_SZ | 文字列(省略時はこの種類になります) |
REG_EXPAND_SZ | %PATH%のような環境変数を含められる文字列 |
REG_MULTI_SZ | 複数の文字列(区切り文字は既定で\0) |
REG_DWORD | 32 ビットの数値。設定のオン・オフ(0 と 1)によく使われる |
REG_QWORD | 64 ビットの数値 |
REG_BINARY | バイナリデータ |
REG_NONE | 種類なし |
キーや値を追加・変更する(reg add)
reg add <キー名> [/v 名前 | /ve] [/t 種類] [/d データ] [/f]
キーが存在しなければ、途中のキーも含めて作成されます。指定した値がすでに存在する場合は、確認のうえ上書きされます(/fを付けると確認なしで上書きします)。
reg add "HKCU\Software\MyApp" /v UserName /t REG_SZ /d "taro"
reg add "HKCU\Software\MyApp" /v Enabled /t REG_DWORD /d 1
実行に成功すると、「この操作を正しく終了しました。」と表示されます。
add のオプション
| オプション | 内容 |
|---|---|
/v 名前 | 追加する値の名前 |
/ve | 既定の値(名前なし)を設定する |
/t 種類 | 値の種類(省略するとREG_SZ) |
/d データ | 値に設定するデータ(REG_DWORDは 10 進数または0xで始まる 16 進数) |
/s 区切り文字 | REG_MULTI_SZで複数の文字列を区切る 1 文字(既定は\0) |
/f | 既存の値を、確認なしで上書きする |
すでに存在する値に対してreg addを実行すると、上書きするかどうかを尋ねる確認メッセージ(Yes/No)が表示されて入力待ちになります。バッチファイルで自動実行する場合は、/fを付けておかないと処理が止まってしまいます。
例:ファイルの拡張子を表示する
エクスプローラーでファイルの拡張子を表示する設定は、HideFileExtという値で管理されています。0にすると拡張子が表示されます。
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v HideFileExt /t REG_DWORD /d 0 /f
設定は、エクスプローラーを開き直すか、サインインし直すと反映されます。
キーや値を削除する(reg delete)
reg delete "HKCU\Software\MyApp" /v UserName /f
reg delete "HKCU\Software\MyApp" /f
| オプション | 内容 |
|---|---|
/v 名前 | 指定した値だけを削除する |
/ve | 既定の値(名前なし)を削除する |
/va | キー内のすべての値を削除する(サブキーは残る) |
/f | 確認なしで削除する |
/v、/ve、/vaのいずれも付けずにreg deleteを実行すると、キーとその中のすべてのサブキー・値が削除されます。/fを付けていると確認も表示されないため、元に戻せません。実行前にキー名と/vの有無をよく確認してください。
バックアップと復元(reg export / reg import)
レジストリを変更する前に、対象のキーを.regファイルに書き出しておきましょう。
reg export "HKCU\Software\MyApp" "%USERPROFILE%\Desktop\myapp-backup.reg"
同名のファイルが存在する場合は上書きの確認が出ます。確認なしで上書きするには/yを付けます。
reg import "%USERPROFILE%\Desktop\myapp-backup.reg"
書き出した.regファイルをダブルクリックしても、内容をレジストリに取り込めます。なお、reg importはファイルに書かれているキーと値を追加・上書きするだけで、バックアップ後に追加された値は削除されません。完全に元の状態へ戻したいときは、先にreg deleteで対象のキーを削除してから取り込みます。
バッチファイルで使う
値を変数に取り込む
reg queryの出力は値の名前 種類 データの形式です。for /fで空白区切りに分解すると、データ部分を取り出せます。
@echo off
set KEY=HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion
for /f "tokens=2*" %%a in ('reg query "%KEY%" /v ProductName ^| find "ProductName"') do set PRODUCT=%%b
echo 製品名: %PRODUCT%
日本語を含むバッチファイルを UTF-8 で保存すると、そのままではechoの文字が化けることがあります。その場合は、ファイルを Shift_JIS(ANSI)で保存するか、先頭付近にchcp 65001 >nulを追加します。
tokens=2*は、2 番目の項目(種類)を%%a、それ以降すべて(データ)を%%bに代入する指定です。データに空白が含まれていても、%%bにまとめて取得できます。ただし、値の名前自体に空白が含まれる場合は項目の位置がずれるため、この方法は使えません。
for /fの括弧内でパイプ(|)を使うときは、^|のようにエスケープします。詳しくは関連記事を参照してください。
キーや値が存在するか確認する
reg queryは、対象が存在しないと終了コード 1 を返します。この性質を使うと、存在確認ができます。
@echo off
reg query "HKCU\Software\MyApp" /v Enabled >nul 2>&1
if errorlevel 1 (
echo 設定がありません。初期値を登録します。
reg add "HKCU\Software\MyApp" /v Enabled /t REG_DWORD /d 1 /f >nul
) else (
echo 設定が見つかりました。
)
>nul 2>&1は、標準出力とエラー出力を表示しない指定です。
32 ビット/64 ビットのレジストリビュー
64 ビット版の Windows では、HKLM\SOFTWAREなど一部のキーで、32 ビットのアプリが参照するレジストリが別の場所(WOW6432Node)に分けられています。regコマンドには、どちらのビューを操作するかを指定するオプションがあります。
| オプション | 内容 |
|---|---|
/reg:32 | 32 ビットのレジストリビューを操作する |
/reg:64 | 64 ビットのレジストリビューを操作する |
reg query "HKLM\SOFTWARE\MyApp" /reg:32
32 ビットのアプリが読み書きする設定を扱うときに、指定が必要になることがあります。
まとめ
| やりたいこと | コマンド |
|---|---|
| キーの内容を表示する | reg query "キー名" |
| 特定の値を表示する | reg query "キー名" /v 値の名前 |
| 文字列で検索する | reg query "キー名" /s /f 検索語 |
| 値を追加・変更する | reg add "キー名" /v 名前 /t 種類 /d データ /f |
| 値を削除する | reg delete "キー名" /v 名前 /f |
| キーを削除する | reg delete "キー名" /f |
| バックアップを取る | reg export "キー名" ファイル名.reg |
| バックアップから復元する | reg import ファイル名.reg |