setxコマンドの「-f」オプションを使えば、テキストファイル中から文字列を抜き出して、環境変数にセットできる。「-f」オプションを使う場合は文字列の位置を示す座標データを指定する。座標は「-x」オプションで確認できる。
対象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つとして認識される(つまり切り出す文字列から削除できる)。
以上のような事情があるため、ファイル中の文字列を環境変数にするには、次のような手順を踏むとよい。
例として、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 ……ファイルに保存する
次は、「-f」オプションでファイル名を指定し、さらに「-x」オプションを付けて座標を表示させる。ただし「-x」オプションを使う場合、使用するsetxコマンドのバージョンに応じて、少し書式が異なるので注意する(先頭の環境変数名の有無が異なる。Windows XPの場合は、代入はされないが、ダミーで指定しておく)。
C:\>setx GATEWAYADDRESS -f ipconfig.txt -x
C:\>setx -f ipconfig.txt -x
実際に実行すると、次のようになる(これは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)
一見すると非常に複雑だが、よく見ると、「(<縦座標>,<横座標> <文字列>)」というパターンが繰り返し表示されていることが分かる。分かりやすいように、オリジナルのテキストファイルに含まれている文字列部分を赤くしてみると次のようになる。
以上の結果から、求めるゲートウェイのIPアドレスは「Default Gateway」の行の最後にある(9,12)であることが分かる。
文字列の座標が分かれば、それを「-a」オプションで指定すればよい。
C:\>setx GATEWAYADDRESS -f ipconfig.txt -a 9,12
Extracted value is: 192.168.1.11 ……結果のゲートウェイアドレス
ここでは「192.168.1.11」という文字列が抜き出され、それがGATEWAYADDRESSという環境変数にセットされている。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.