2022年5月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

« HTAやHTML、Excel VBAなどでWScript.ShellのPopup(時間指定)を使う。 | トップページ | ひとつのスクリプトから同時に複数のMsgBoxを出す。 »

2010年5月 9日 (日)

コマンドプロンプトでCALLと^を使って遅延展開する。

バッチファイルでは、CALLと%%を使って遅延展開ができました。

for %%i in (aaa bbb ccc) do (
set xxx=%%i
call echo %%xxx%% "%%xxx%%"
)

しかし、この手はコマンドプロンプトで使えませんでした。

しかし、^を使えばできます。例えば、%^xxx%、%xxx^%、...など。

for %i in (aaa bbb ccc) do (
set xxx=%i
call echo %xxx^% ^"%xxx^%^"
)

しかし、本当は、^を使わなくても、CALLだけでもできます。

set xxx=
for %i in (aaa bbb ccc) do (
set xxx=%i
call echo %xxx% "%xxx%"
)

要は1回目の解析パスで環境変数の名前が一致しなければよいのです。
%環境変数%の置換処理は^のエスケープ処理より先なので、環境変数の名前を擬装するのに^が使えます。
擬装した名前があれば駄目ですが。。。
また、"~"で囲まれても駄目です。
set xxx^^=aaa
set xxx=bbb
echo %xxx^% → aaa
echo "%xxx^%" → "aaa"
---
set xxx^^=
set xxx=bbb
echo %xxx^% → %xxx%
echo "%xxx^%" → "%xxx^%"
call echo %xxx^% → bbb
call echo "%xxx^%" → "%xxx^^%"
call echo ^"%xxx^%^" → "bbb"

« HTAやHTML、Excel VBAなどでWScript.ShellのPopup(時間指定)を使う。 | トップページ | ひとつのスクリプトから同時に複数のMsgBoxを出す。 »