テキストファイル中の文字列を環境変数にセットする(setx応用編)Tech TIPS

setxコマンドの「-f」オプションを使えば、テキストファイル中から文字列を抜き出して、環境変数にセットできる。「-f」オプションを使う場合は文字列の位置を示す座標データを指定する。座標は「-x」オプションで確認できる。

» 2008年04月04日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

setxコマンドでテキストファイル中の文字列を環境変数にセットする

対象OS:Windows XP/Windows Vista、Windows Server 2003/Windows Server 2008


 TIPS「setxで環境変数の値を設定する(基本編)」では、「setx」というコマンドと使って、システムとユーザーの環境変数をセットする方法を紹介した。環境変数をセットしておくと、新しく起動したプロセスやプログラム、コマンドプロンプトからその変数を参照できる。システムや環境に依存するような値などを変数にセットしておくことにより、プログラムやスクリプトなどに汎用性を持たせることができる(TIPS「環境変数を変更する」も参照)。

 本TIPSではsetxのより進んだ使い方として、テキストファイルから文字列を取り出して設定する方法については解説する。

テキストファイルから値を切り出して環境変数にセットする

 先のTIPSで紹介したsetxコマンドの使用方法では、指定した文字列やレジストリキーの値などを環境変数にセットすることができるが、例えばipconfig.exeコマンドの出力結果(自分のIPアドレスやゲートウェイアドレスなどの情報)をセットすることはできない。だが、「-f」オプションを使ってテキストファイルを指定すれば、その中に含まれる文字列を取り出して環境変数にセットできる。その使い方は次のとおりである。

setx <変数名> -f <ファイル名> -a <縦位置>,<横位置>



 これは、指定された変数「<変数名>」に、ファイル「<ファイル名>」の「<縦位置>,<横位置>」の場所にある文字列を切り出してセットする、という意味である。最後のパラメータは、切り出す文字列の位置を指定するための座標の指定であるが(0が先頭)、これが実は分かりにくい。指定されたファイルの1行目の先頭の文字列は(0,0)、次の文字列は(0,1)、その次は(0,3)、2行目の先頭の文字列が(1,0)、その次が(1,1)、……、というふうに数えるのだが、内容が複雑だと座標を把握するのは困難である。そこで、まずは「-x」オプションを指定して各文字列がどの座標を持つのかを出力させ、その結果を使うとよい。

 また「文字列」とは、「(空白文字、0x20)」「Tab文字(0x09)」「CR(0x0d)」「LF(0x0a)」で区切られた文字の集まりのことを指すが、「-d "<追加文字>"」オプションを付けると、それらの文字も追加の区切り文字として認識される。例えば「-d ";,"」とすると、「;」と「,」も区切り文字の1つとして認識される(つまり切り出す文字列から削除できる)。

 以上のような事情があるため、ファイル中の文字列を環境変数にするには、次のような手順を踏むとよい。

手順1――対象となる文字列を含むテキストファイルを用意する

 例として、ipconfig.exeコマンドの出力結果からゲートウェイアドレスを取り出して、GATEWAYADDRESSという環境変数にセットしてみよう。

 まずは、コマンドの出力結果を一時的なファイルに保存する。

C:\>ipconfig ……IPアドレス情報を表示させる

Windows IP Configuration


Ethernet adapter ローカル エリア接続:

        Connection-specific DNS Suffix  . : example.com
        IP Address. . . . . . . . . . . . : 192.168.1.155
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.1.11 ……これを環境変数にセットさせたい


C:\>ipconfig  > ipconfig.txt ……ファイルに保存する



手順2――座標データを表示させる

 次は、「-f」オプションでファイル名を指定し、さらに「-x」オプションを付けて座標を表示させる。ただし「-x」オプションを使う場合、使用するsetxコマンドのバージョンに応じて、少し書式が異なるので注意する(先頭の環境変数名の有無が異なる。Windows XPの場合は、代入はされないが、ダミーで指定しておく)。

C:\>setx GATEWAYADDRESS -f ipconfig.txt -x

Windows XPのサポートツールに含まれるsetxの場合のコマンドライン

C:\>setx -f ipconfig.txt -x

Windows Server 2003/Windows Vista/Windows Server 2008の場合のコマンドライン
これらのOSでは、setxが標準コマンドとして用意されている。

 実際に実行すると、次のようになる(これはWindows XPのサポートツールに含まれるsetxコマンドの実行例)。

C:\>setx GATEWAYADDRESS -f ipconfig.txt -x


(1,0 Windows) (1,1 IP) (1,2 Configuration)


(4,0 Ethernet) (4,1 adapter) (4,2 ローカル) (4,3 エリア接続:)

(6,0 Connection-specific) (6,1 DNS) (6,2 Suffix) (6,3 .) (6,4 :) (6,5 example.com)
……(中略)……
(8,0 Subnet) (8,1 Mask) (8,2 .) (8,3 .) (8,4 .) (8,5 .) (8,6 .) (8,7 .) (8,8 .) (8,9 .) (8,10 .) (8,11 .) (8,12 .) (8,13 :) (8,14 255.255.255.0)
(9,0 Default) (9,1 Gateway) (9,2 .) (9,3 .) (9,4 .) (9,5 .) (9,6 .) (9,7 .) (9,8 .) (9,9 .) (9,10 .) (9,11 :) (9,12 192.168.1.11)



 一見すると非常に複雑だが、よく見ると、「(<縦座標>,<横座標> <文字列>)」というパターンが繰り返し表示されていることが分かる。分かりやすいように、オリジナルのテキストファイルに含まれている文字列部分を赤くしてみると次のようになる。

setxの「-x」オプションの実行結果 setxの「-x」オプションの実行結果
setxの「-x」オプションの実行結果のうち、元のテキストファイルに含まれる部分を赤く表示してみた(実際にはただのテキストファイルなので、色は付いていない)。デフォルトゲートウェイアドレスの部分は、(この画面では隠れているが)、9行目の最後の方にある(9,12)であることが分かる。

 以上の結果から、求めるゲートウェイのIPアドレスは「Default Gateway」の行の最後にある(9,12)であることが分かる。

手順3――環境変数に代入する

 文字列の座標が分かれば、それを「-a」オプションで指定すればよい。

C:\>setx GATEWAYADDRESS -f ipconfig.txt -a 9,12
Extracted value is: 192.168.1.11  ……結果のゲートウェイアドレス



 ここでは「192.168.1.11」という文字列が抜き出され、それがGATEWAYADDRESSという環境変数にセットされている。

「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。