ここではSETコマンドの拡張機能を説明します。
コマンドラインからSET /?と入力してみましょう。
なお、長々と表示されて読めないと苦情を出す前にset /?|moreと入力してください。
C:\>SET /?
cmd.exe 環境変数を表示、設定、または削除します。
SET [変数名=[文字列]]
変数名 環境変数名を指定します。
文字列 変数に割り当てる文字列を指定します。
現在の環境変数を表示するには、パラメータを指定せずに SET と入力してください。
コマンド拡張機能を有効にすると、SET は、次のように変更されます:
等号や値を指定せずに、変数名だけを指定して SET コマンドを実行すると、
SET コマンドに指定された名前に接頭辞が一致するすべての変数の値が
表示されます。たとえば、
SET P
と入力すると、文字 'P' で始まるすべての変数が表示されます。
変数名が現在の環境に見つからない場合は、SET コマンドは、ERRORLEVEL を
1 に設定します。
SET コマンドでは、環境変数の値として、1 桁目以外の任意の位置に等号 (=)
を含めることができます。
SET コマンドには、新しいスイッチが追加されます:
SET /A 式
/A スイッチは、等号の右側の文字列が、評価すべき数式であることを
指定します。式の評価はごく単純で、次の操作がサポートされます。
操作は、優先順位の高い順に示されています:
() - グループ化
* / % - 算術演算子
+ - - 算術演算子
<< >> - 論理シフト
& - ビット演算子 AND
^ - ビット演算子排他的 OR
| - ビット演算子 OR
= *= /= %= += -= - 代入
&= ^= |= <<= >>=
, - 式の区切り記号
論理演算子またはモジュール演算子を使う場合は、式文字列を引用符で
囲む必要があります。式内の数値以外の文字列は環境変数文字列として
処理され、使用される前に数値に変換されます。指定された環境変数名が
現在の環境で定義されていない場合は、値として 0 が使用されます。
これにより、いくつもの % 記号を入力して値を取得しないでも、環境
変数の値を算術演算に使うことができます。
コマンド スクリプト外でコマンド ラインから SET /A を実行すると、式の
最終的な値が表示されます。割り当て演算子を使うには、割り当て演算子
の左側に環境変数名が必要です。数値は 10 進数ですが、接頭辞として 0x
を付けると16 進数、0b を付けると 2 進数、0 を付けると 8 進数になり
ます。従って、0x12 は 0b10010、あるいは 022 と同じです。8 進表記を
使う場合は、注意してください。08 や 09 は、8 と 9 が有効な 8 進数で
はないため、有効な数値ではありません。
環境変数の置換は、次のように拡張されます:
%PATH:文字列1=文字列2%
は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列1" を
"文字列2" に置き換えます。"文字列2" に空の文字列を指定すると、展開
された出力からすべての "文字列1" を削除することができます。"文字列1"
をアスタリスクで始め、展開された出力の先頭から、文字列1 の残りの部分
が最初に現れるまでのすべてを一致させることもできます。
%PATH:~10,5%
は、PATH 環境変数を展開し、展開結果の 11 番目 (オフセット 10) の文字
から始まる 5 文字だけを使います。
C:\>
ここで重要なのは以下の部分です。
使用例を以下に挙げます。
C:\>set test=10 C:\>set /a test=test+5 15 C:\>echo %test% 15 C:\>set test=TemptempTemp C:\>echo %test:t=@% @emp@emp@emp C:\>echo %test:tem=Za% ZapZapZap C:\>echo %test:te=手% 手mp手mp手mp C:\>set test=0123456789 C:\>echo %test:~0,10% 0123456789 C:\>echo %test:~0,5% 01234 C:\>echo %test:~5,5% 56789 C:\>echo %test:~5,100% 56789 C:\>C:\>set /A test=%test:~5,5%+20 56809
この拡張機能によって、バッチファイルでの文字列操作や演算などが容易に行えるようになりました。複雑なバッチファイルを作成する上で大変便利な機能です。
PAL, The Bloody Wizard