やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

環境変数のエクスポートとインポート

以前、環境変数はまちがって上書きしてしまうと復元できないというリスクがあると気づいた。それへの対処。

対処

おそらくWindowsの「復元」を利用すれば可能になる。

でも、たかが環境変数を復元するだけで、システム全体を復元するのは影響範囲が広すぎる。 インストールしたアプリが削除されるなど、べつの問題が生じる可能性がある。

ファイルをもちいてエクスポートとインポートができたら嬉しい。

基礎知識

環境変数レジストリだった

こちらを参考にさせていただいた。

どうやら環境変数の実体はレジストリらしい。

レジストリはINIファイル形式だった

  • Windowsレジストリエディタ regedit.exe でエクスポートすると拡張子regファイルが保存される
  • また、RapidEEでバックアップしたファイルも拡張子がregである

ragファイルをテキストエディタで開いてみると、INIファイル形式であるとわかる。

INIファイル形式

INIファイル形式は、セクション、キー、値の構成。ついでにコメントがある。

書式 説明
; コメント 先頭に;を付与した行はコメントになる
[セクション名] []で囲ったらセクションになる。セクションは複数のキーバリューを含める
キー名=値 環境変数のキーと値。

RapidEEのバックアップファイル

テキストエディタで開いてみると、レジストリのパスも判明した。

; User: Administrator
[HKEY_CURRENT_USER\Environment]

; System variables
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

セクション名が、そのままレジストリのパスになっている。

環境変数 レジストリのパス
ユーザ環境変数 HKEY_CURRENT_USER\Environment
システム環境変数 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

レジストリ値の型

RapidEEのバックアップファイルを見てみると、以下のような記述がある。

"GTK_HOME"=hex(2):43,3A,5C,50,72,6F,67,72,61,6D,20,46,69,6C,65,73,5C,47,74,6B,2B,00

どうやらレジストリの値には型があるらしい。型に沿った記述方法がある。

http://www.atmarkit.co.jp/ait/articles/0901/16/news156.html

バイナリ値をテキストで書く。なんて面倒な…。

意味 書式
REG_SZ 文字列 キー=値
REG_DWORD 数値 キー=dword:8桁16進数
REG_BINARY バイナリ キー=hex:2桁16進数,...
REG_MULTI_SZ 複数行文字列値 キー=hex(7):2桁16進数,...
REG_EXPAND_SZ 展開可能な文字列値 キー=hex(2):2桁16進数,...

環境変数

環境変数は、レジストリにおいて以下のパス?セクション?で定義される。

; User: Administrator
[HKEY_CURRENT_USER\Environment]

; System variables
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment]

それぞれ、ユーザ環境変数、システム環境変数である。

セクション名が、そのままレジストリのパスになっている。

所感

環境変数の実体はレジストリ。だからレジストリから環境変数を操作することも可能。バイナリデータ部分は難しいが。

予備知識だけで大変だな。 でも実体がregファイルだとわかったので、いくらでもエクスポートとインポートできそう。

次回は各ツールをつかって具体的な手順を確認する。