検索
連載
Tech TIPS:

【Windows 10対応】regコマンドを使ってコマンドプロンプトからレジストリを操作する

レジストリを操作する際、レジストリエディターだと定型的な処理や多数のリモートコンピューターのメンテナンスには不便だ。そんなときはWindows OSに標準装備されているCUIベースのレジストリ操作ツール「reg」コマンドを活用しよう。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 7/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016



レジストリとは?

 Windowsシステムの各部の設定値を確認したり、挙動を変更したりしたい場合、「レジストリ」を操作しなければならないことがある。Windows OSでは、レジストリに設定されている値などに基づいて、システム各部が動作するようになっているからだ。レジストリの概要については、以下の記事を参照のこと。

 レジストリを構成する要素を次に示しておく。

レジストリの構成要素
レジストリの構成要素
レジストリとは、Windowsシステム内部の各種設定値を保存しておくためのデータベースである。システムの設定やソフトウェアの構成内容、ユーザーごとの環境設定など、Windows OS内で動作しているさまざまなコンポーネントがこのレジストリを参照して動作している。レジストリ中には、ツリー状の「キー」が構築されている。トップにあるのが「ルートキー」、その下にあるのが「サブキー」だ。それらの中に、幾つかの「」が設定されている。値は名前と種類(型)、データで構成されている。これは「ユーザー環境変数」を保持しているレジストリキーの例である。

レジストリをコマンドラインから操作する

 レジストリを操作するためには、一般的にはGUIベースの「レジストリエディター(regedit.exe)」を使うことが多い。だが何度も同じ処理を実行する場合や、多数のコンピュータに(リモートから)同じ設定を施すならば、コマンドラインで使えるツールが便利である。Windows OSでは、「regreg.exe)」コマンドやPowerShellが標準で利用できる。本TIPSではregコマンドの基本的な使い方を紹介する。

サブコマンドを多く持つregコマンド

 regコマンドには幾つかのサブコマンドがあり、例えばレジストリエントリの内容を表示させるには「reg query <パラメーター列>」を使う。regコマンドで利用できるサブコマンドは次の通りである。

コマンド 機能 リモート
reg query レジストリツリーや値の表示
reg add レジストリキーや値の追加、既存の値の更新
reg delete 指定されたキーや値の削除
reg copy レジストリツリーのコピー
reg compare 指定された2カ所のレジストリツリーの比較
reg export 指定されたキーや値の.regファイルへの書き出し。GUIのレジストリエディターのエクスポートと同じ 不可
reg import reg exportで書き出されたレジストリ値の書き戻し。GUIのレジストリエディターのインポートと同じ 不可
reg save レジストリツリーの保存 (可)
reg restore reg saveで保存されたレジストリの、元の場所への復元 不可
reg load reg saveで保存されたレジストリの、元とは異なる場所へのロード/復元 不可
reg unload reg load操作で読み込まれたレジストリのセクションのアンロード(削除) 不可
reg flags (Windows Vista以降で実装された)「レジストリ仮想化」設定の変更/確認 不可
regコマンドのサブコマンドとその機能
regコマンドにはさまざまなサブコマンドがある。regコマンドの使い方は「reg /?」を実行すると表示される。さらに「reg add /?」のようにサブコマンドに続けて「/?」を指定すれば、サブコマンドごとの詳しい使い方が表示される。「リモート」の欄は、リモートコンピュータのレジストリを操作できるかどうかを表している。「可」となっている場合は、レジストリのキー名の先頭にコンピュータ名を指定できる。

 regコマンドの使い方は、コマンドプロンプト上で「reg /?」を実行すると確認できる。各サブコマンドについては、さらに「reg add /?」などとすれば、使い方やサンプルが表示される。

regコマンドのヘルプ
regコマンドのヘルプ
regコマンドの使い方は、「reg /?」や「reg add /?」とすると表示される。

 なおアクセス対象のキーによっては、管理者権限などが必要になることがあるので、その場合は管理者としてコマンドプロンプトを実行し、そこで実行すること。

レジストリキーの指定方法

 regコマンドを利用する際には、そのパラメーターとしてレジストリキーの名前を指定する必要がある。レジストリには、目的に応じて幾つかの「ルートキー」が存在する。例えばシステム全体に関わる設定は「HKEY_LOCAL_MACHINE\SOFTWARE」、現在のユーザーの設定は「HKEY_CURRENT_USER」などである。だがこれらは非常に長いので、以下のような省略形式を利用することもできる。

キー 正式なキー名称 用途 リモート
HKLM HKEY_LOCAL_MACHINE システム全体に関わる設定 利用可能
HKU HKEY_USERS ユーザーごとの設定 利用可能
HKCU HKEY_CURRENT_USER 現在のユーザーの設定 利用不可能
HKCR HKEY_CLASSES_ROOT COMオブジェクトの登録情報 利用不可能
レジストリのルートキーとその正式形式(主要なもののみ)
レジストリを操作する場合は、これらのルートキーから始まる文字列を指定する。ルートキーには、短い省略形と正規な名称の2つがあり、いずれを利用してもよい。なおリモートコンピュータ上のレジストリを指定する場合は、HKLMとHKUのみが使用可能であり、他のキーは指定できない。

 この省略形を使うと、例えば「HKEY_CURRENT_USER\Environment」は「HKCU\Environment」と短く省略して、簡潔に記述できる。

reg queryでレジストリのキーや値を確認する

 まずは一番基本的な使い方として、レジストリの特定のキーや値の内容を調べてみる。このためには「reg query <キー名>」を利用する。

 例えばWindows OSの「ユーザー環境変数」の値は「HKEY_CURRENT_USER\Environment(=HKCU\Environmentと同じ)」に保存されているので、この内容を見てみよう(環境変数についてはTIPS「Path環境変数を設定/編集する」も参照)。キー名などの指定は大文字でも小文字でもよい。キー名を正式名で指定するなら「reg query HKEY_CURRENT_USER\Environment」、省略名にするなら「reg query HKCU\Environment」とする。

reg queryでレジストリキーの内容を表示させる
reg queryでレジストリキーの内容を表示させる
reg queryにキー名を付けると、そのキーの下にある「値」や「サブキー」の一覧とその設定内容が表示される。

 /sオプションを付けると、「dir /s」コマンドのように(TIPS「dirコマンドでファイル名の一覧を取得する」参照)、指定したキー以下にある全てのサブキーとその値の情報が表示される。場合によっては非常に大量に表示されるので注意すること。

 キー全体ではなく、その中に含まれる特定の値の情報だけを表示させたければ、「reg query <キー名> /v <値の名前>」を実行する。キー名や値の名前に空白文字や特殊文字が含まれている場合は、ダブルクオート記号で囲むこと。「v*」や「var?」のようなワイルドカードを指定すると、該当する値のみが表示される。

 例えば「システム環境変数」は「HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment」に保存されているので、この中からwindir環境変数の値を取り出すには「reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v windir」のようにする。

HKLM内の値を取り出す例
HKLM内の値を取り出す例
キー名などに空白や特殊文字が含まれている場合は、全体をダブルクオート記号で囲むこと(大文字/小文字の違いは無視される)。これはwindir環境変数の値を確認している。「set windir」と結果が異なるのは、レジストリ上には、「%」記号による展開前の元の値が保存されているため。

●レジストリエディターでキー名を取得する

 キー名は長くて覚えにくく、そのまま扱うには面倒だ。レジストリエディターで対象となるキーやサブキーを開いているなら、キー名を右クリックして、メニューから[キー名のコピー]を選ぶと、そのキーのパスを簡単にクリップボードにコピーできる。TIPS「レジストリキーのパス文字列をクリップボードにコピーする」も参照のこと。

キー名のコピー
キー名のコピー
レジストリエディターでキー名を選択し、右クリックすると簡単にキーのパス情報をコピーできる。

reg addでキーや値を追加/変更する

 レジストリに新しいサブキーや値を追加したり、値を変更したりするには「reg add <キー名> /v <値の名前> /t <値の種類 > /d <値のデータ>」を実行する。値の種類やデータを省略するとREG_SZ型で空の文字列が設定されるし、キー名しか指定しないと、そのサブキーが作成される。

 値の種類(値の型)として利用できるデータ型は次の通り。

種類(型) 説明
REG_NONE 値無し型(名前のみでデータを持たないもの)
REG_SZ 文字列データ(改行なしの単一行)
REG_MULTI_SZ 複数行に渡る文字列データ
REG_EXPAND_SZ 展開可能な文字列(環境変数参照などを含む文字列)データ
REG_BINARY 可変長のバイナリデータ
REG_DWORD 32bitの整数値データ
REG_QWORD 64bitの整数値データ
値の種類(値の型)
値にはこれらの種類(データ型)がある。何が利用できるか、どのように利用されるかは、レジストリを利用するプログラム次第である。間違った種類を設定するとプログラムやWindows OSが正しく動作しなくなる。

 すでに存在する値やキー名の場合は、上書きするかどうかの確認メッセージが表示され、「y」と答えると実際に更新される(/fオプションを付けると、確認なしで実行される)。

 例えばユーザー環境変数に新しい変数「myvar」、値「Hello!」を設定するなら、「reg add HKCU\Environment /v myvar /t reg_sz /d "Hello!"」を実行する。

環境変数myvarに値をセットする例
環境変数myvarに値をセットする例
環境変数の初期値を設定するには、このようにして新しい値をHKCU\Environmentキーの下に追加すればよい(これはsetxコマンドと同じ機能)。

 なお環境変数中で「%var%」のように、他の変数を参照・展開させたい場合は、REG_SZ型ではなく、REG_EXPAND_SZ型を使って「reg add HKCU\Environment /v myvar2 /t reg_expand_sz /d ^%myvar^%」のようにセットすること(「^%」は、「%」をコマンドライン側で展開させないようにするための表記方法)。

reg deleteでキーや値を削除する

 レジストリの中にある値を削除するには、「reg delete <キー名> /v <値の名前>」を実行する。ワイルドカード指定は使えない。実行すると確認メッセージが表示されるので、「y」と入力すると実際に削除が実行される(/fオプションを付けると、確認なしで実行される)。レジストリにはアンドゥ機能などはないので、注意して実行すること。

 値の名前を省略して、「reg delete <キー名>」とすると、そのキー全体が削除対象となる。そのサブキーだけでなく、その中にある値や、さらに下位のサブキーも含めて全部削除されるので、十分注意して実行すること。

レジストリキーや値の削除
レジストリキーや値の削除
キーや値を削除しようとすると、確認のために「y」と入力する必要がある。キーだけを指定すると、そのサブキーとその下にあるサブツリーや値も全部削除されるので慎重に実行すること。

リモートコンピュータ上のレジストリを操作する

 リモートコンピュータ上のレジストリを指定する場合は、キーの先頭に「\\<コンピュータ名>\」を付ければよい。例えば「reg query \\server1\HKLM\SOFTWARE\Microsoft」のようにする。ただし、リモートからレジストリを操作する場合は「CURRENT_USER(現在ログオンしているユーザー)」という概念はないので、HKLMとHKUのみが利用できる。詳細はTIPS「リモートからレジストリを操作する」を参照していただきたい。

その他のregコマンドの機能

 以上で述べたquery/add/deleteがregコマンドの基本機能だが、それ以外にも幾つか、レジストリを管理するための機能が用意されている。詳細はそれぞれの記事を参照していただきたい。

●レジストリのコピー/比較

 「reg copy」や「reg compare」を使うと、レジストリツリーをコピーしたり、比較したりできる。ローカルコンピュータのレジストリ内だけでなく、2つのコンピュータ間でのリモートコピーもできる。

●レジストリのエクスポート/インポート

 「reg export」を使うと、指定したサブキー以下のレジストリツリーをまとめて.regファイルとして保存しておける。保存したファイルは「reg import」でインポートできる。

 この.regファイルは、GUI版のレジストリエディターでレジストリを書き出したときに作成される.regファイルと同じなので、そのレジストリエディターでインポートしたり、エクスプローラでダブルクリックして実行(レジストリを設定)したりできる(後述のreg saveのハイブファイルと違い、キーや値の削除コマンドなども記述できる)。なお、この.regファイルをテキストエディタで手動作成する場合は、保存時の文字コードに注意する。.regファイルは、BOM付きのUTF-16 LE形式でなければならない(BOMについてはTech Basics「UTF-8」参照)。

.regファイルの文字コードに注意
.regファイルの文字コードに注意
.regファイルは、BOM付きのUTF-16 LE(リトルエンディアン)形式で保存すること。メモ帳なら文字コードとして「Unicode」を選択する。

●レジストリのセーブ/リストア

 「reg save」を使うと、指定したサブキー以下のレジストリツリーをまとめて保存しておくことができる。保存されたファイルは、「reg restore」で同じ場所へ復元できる。レジストリエディターで「.hiv(ハイブ)」形式で保存/復元するのと同じである。これは古い形式のフォーマットなので、現在では上の.regファイルを使う方がよいだろう。

●レジストリのロード/アンロード

 「reg save」でレジストリを、元とは異なる場所へロード/復元する機能である。保存されているレジストリ情報を確認したり、参照したりしながら、現在のレジストリ設定を変更する、といった用途に利用できる。ロードしたレジストリの情報は、「reg unload」で解除(削除)できる。

●レジストリの仮想化とリダイレクトの制御

 「reg flags」を使うと、「レジストリ仮想化」の設定を変更/確認できる。レジストリの仮想化とはUAC(ユーザーアカウント制御)と連動して、管理者だけがアクセスできるレジストリエントリへのアクセスを制御することで、アプリケーションを正常に実行できるようにする機能のことである。

 また64bit版Windows OSでは、内部的には32bitアプリと、64bitアプリ向けの2種類のレジストリを持っていて、必要に応じてアクセス先を切り替えている(リダイレクト機能。同じアプリでも、32bit版と64bit版で、それぞれ異なる設定をレジストリに破綻なく保存できるようにするための機能。実際にはほとんどの部分が共通で、一部のレジストリのみが独立して管理されている)。ほとんどのケースではその違いを意識する必要はないが、使っているアプリがどちらのレジストリをアクセスしているかを意識して操作しなければならないこともある。アクセス先のレジストリのセットを明示的に切り替えるには、regコマンドのオプションとして「/reg:32」「/reg:64」のいずれかを指定する。

 レジストリの仮想化やリダイレクトなどについては、以下の記事を参照していただきたい。

■更新履歴

【2019/03/07】最新状況に合わせて、内容を更新しました。

【2014/09/01】Windows 7以降および64bit版のWindows OSの情報を追記しました。

【2004/02/21】初版公開(対象OSはWindows 2000/Windows XP/Windows Server 2003)。


「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

ページトップに戻る