% の再評価

call の右方は構文解析時に一度、実行時に再度 % の処理がなされる。 具体的には % による環境変数展開、引数展開と %% の % への置換が二度行われる。 従って、例えばパラメータに1個の % を渡したい時には %%%% と書く。

^ によるクォート処理は構文解析時にだけ行われ、実行時には行われない。 つまり一度しか行われない。

バッチファイル、サブルーチン呼び出し以外の命令実行

call /? に書かれている機能は、バッチファイルの呼び出し、ラベルを使っての 内部サブルーチン呼び出しの2つであるが、それ以外の命令も実行できる。

if、for、( ) の構造を持った文以外の、内部コマンド、外部プログラム呼び出し等も 前に call をつけて実行することが出来る。この時、前項に書いた通り % の処理が 二度行われるのでこれを利用できる。

例えば、環境変数を配列のように使用できる。

set DATA[1]=11111
set DATA[2]=22222
set DATA[3]=33333
set N=2
set DATA[%N%]=@@@@@
call echo %%DATA[%N%]%%

最終行は、構文解析時に call echo %DATA[2]% になり、実行時に %DATA[2]% が展開される。

また、set /? にあるうまく行かない例:

set LIST=
for %%i in (*) do set LIST=%LIST% %%i
echo %LIST%

を解決するのに set /? の解説にある遅延展開を使わず、

set LIST=
for %%i in (*) do call set LIST=%%LIST%% %%i
echo %LIST%

とすることが出来る。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-03-10 (木) 00:41:48 (4945d)