DOSバッチファイルでcallを使用して別のバッチファイルを呼び出すことは以前から出来ていました
先日調べ物をしていてcallでラベルを呼び出すことができるのを知りました
for文と組み合わせて繰り返し処理に使用していたのですが、いまいち動きを理解していなかったので調べてみました
サンプル1
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@echo off echo Step1 FOR /L %%a in (1,1,3) do call :test %%a echo Step2 :test echo Step3 echo %1 echo Step4 :end echo Step5 |
実行結果1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
c:\work>test.cmd Step1 Step3 1 Step4 Step5 Step3 2 Step4 Step5 Step3 3 Step4 Step5 Step2 Step3 ECHO は <OFF> です。 Step4 Step5 |
サンプル2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@echo off echo Step1 FOR /L %%a in (1,1,3) do call :test %%a echo Step2 goto end :test echo Step3 echo %1 echo Step4 goto :eof :end echo Step5 |
実行結果2
1 2 3 4 5 6 7 8 9 10 11 12 13 |
c:\work>test.cmd Step1 Step3 1 Step4 Step3 2 Step4 Step3 3 Step4 Step2 Step5 |
サンプル3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@echo off echo Step1 FOR /L %%a in (1,1,3) do call :test %%a echo Step2 FOR /L %%a in (4,1,6) do call :test %%a echo Step6 goto end :test echo Step3 echo %1 echo Step4 goto :eof :end echo Step5 |
実行結果3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
c:\work>test.cmd Step1 Step3 1 Step4 Step3 2 Step4 Step3 3 Step4 Step2 Step3 4 Step4 Step3 5 Step4 Step3 6 Step4 Step6 Step5 |
goto :eofの1行を付け加えることで想定の動きをしてくれたのですが、この場合の:eofはスクリプトの終了ではなくてcallで呼び出されたラベルの終了の動きのようです
あぁ~スッキリ:-)