CALL命令の謎

10月29日記事において、

また、call バッチファイル名 や call :ラベル名 だけではなく、call CMDビルトイン>コマンド や call 実行ファイル名、call 文書ファイル名 等としても、コマンドプロンプトから直接ファイル名などを入れたのと同じように実行されますね。
と書いたが、ちょっと試したところ、call は単に右辺のコマンドを実行するだけでなく、sh の eval 相当の機能もあるようだ。

バッチファイルの中で、

set A=PATH
echo %%%A%%%

とやると、当然のことながら、
%PATH%
と表示されるが、

set A=PATH
call echo %%%A%%%

とやると、echo %PATH% が実行され、PATHの値が表示される。

set A=echo %%PATH%%
%A%
call %A%

も同様。
容易に推測されるように、call を重ねて前置するとその回数だけ eval される。
これは何かの時に使えるかもしれない。ただし、iffor のような構造を持った命令は call の後では使えないようだ。