2011年8月14日日曜日

バッチファイルに潜む罠(2) - Call :(label) の出力を他のコマンドにリダイレクトすると失敗する。

ファイルへのリダイレクトは問題ないけど……

Command Prompt
C:\>dir /b *.txt
aaa.txt
bbb.txt
ccc.txt

C:\>type call2file.cmd
@Echo Off

Call :ECHO_ARGS %*> args.log
Exit /B 0

:ECHO_ARGS
For %%i In (%*) Do Echo.%%~i
Exit /B 0

C:\>call2file.cmd *.txt

C:\>type args.log
aaa.txt
bbb.txt
ccc.txt

C:\>

コマンドへリダイレクトすると……

Command Prompt
C:\>type call2cmd.cmd
@Echo Off

Call :ECHO_ARGS %*| More
Exit /B 0

:ECHO_ARGS
For %%i In (%*) Do Echo.%%~i
Exit /B 0

C:\>call2cmd.cmd
バッチ スクリプト外でバッチ ラベルを呼び出すことはできません。


C:\>

失敗。。。

対処

考え中……