プログラミング経験のある方であれば、変数は単項式であるという解釈が一般的だと思いますが、バッチ処理のおける環境変数の参照は、純粋にコマンド実行時レベルのテキスト展開にすぎません。よって、環境変数そのものに、実行するべきコマンドを保存し、環境変数を参照してコマンドを実行するといったことも可能です。

サンプル07

@echo off

set PARAM=Kitty on your lap
set COMMAND=echo %PARAM%

%COMMAND%

pause

実行結果

サンプル07の実行結果

サンプル07は、事前に用意された環境変数COMMANDを展開して、その結果をコマンドとして実行しています。COMMAND変数にはechoコマンドを表す文字列が保存されていますが、パラメータからさらに%PARAM%変数が参照されます。このバッチファイルを実行すると、正しくCOMMAND変数の文字列がコマンドとして実行されていることが確認できます。

このような性質を利用すれば、ある種のメタプログラミングのような、バッチ処理をバッチファイルで動的に生成するといったことが可能です。しかし、バッチファイルの本来の目的を考えれば、どのようなコマンドが実行されるか分からないような、複雑に参照し合う処理は避けるべきでしょう。

参考文献

[Microsoft TechNet コマンド ライン リファレンス]