bat 関数 サブルーチン

サンプル1

:文字列で定義
call :文字列で呼び出し

C:\Users\a\Desktop>
C:\Users\a\Desktop>type sample1.bat
@echo off
echo -----script start-----
echo.

call :func1
pause

:func1
echo aaa
exit /b
C:\Users\a\Desktop>

実行結果

呼出し後にexit /bを記載しないと、もう一度サブルーチンが実行される

C:\Users\a\Desktop>
C:\Users\a\Desktop>sample1.bat
-----script start-----

aaa
続行するには何かキーを押してください . . .
aaa

C:\Users\a\Desktop>

サンプル2

C:\Users\a\Desktop>
C:\Users\a\Desktop>type sample2.bat
@echo off
echo -----script start-----
echo.

call :func1
pause
exit /b

:func1
echo aaa
exit /b
C:\Users\a\Desktop>

実行結果

C:\Users\a\Desktop>
C:\Users\a\Desktop>sample2.bat
-----script start-----

aaa
続行するには何かキーを押してください . . .

C:\Users\a\Desktop>

サンプル3

C:\Users\a\Desktop>
C:\Users\a\Desktop>type sample3.bat
@echo off
echo -----script start-----
echo.

set var=aaa

echo %var%
echo.
call :func1
echo.
echo %var%

pause
exit /b

:func1
setlocal
set var=bbb
echo %var%
exit /b
C:\Users\a\Desktop>

実行結果

setlocalを使って、サブルーチンを範囲にした変数定義

C:\Users\a\Desktop>
C:\Users\a\Desktop>sample3.bat
-----script start-----

aaa

bbb

aaa
続行するには何かキーを押してください . . .

C:\Users\a\Desktop>

サンプル4

C:\Users\a\Desktop>
C:\Users\a\Desktop>type sample4.bat
@echo off
echo -----script start-----
echo.

call :func1
echo %errorlevel%

call :func2
echo %errorlevel%

call :func3
echo %errorlevel%

exit /b

:func1
exit /b 1

:func2
set errorlevel=0
exit /b

:func3
exit /b 1

C:\Users\a\Desktop>

実行結果

errorlevelを上書くと、exit /bで指定しても反映されないので
exit /b 終了ステータスの形式を使うこと

C:\Users\a\Desktop>
C:\Users\a\Desktop>echo %errorlevel%
0

C:\Users\a\Desktop>
C:\Users\a\Desktop>sample4.bat
-----script start-----

1
0
0

C:\Users\a\Desktop>

参考

call
call コマンドのリファレンス記事。親バッチ プログラムを停止せずに、1 つのバッチ プログラムを別のバッチ プログラムから呼び出します。
batノウハウ - Qiita
badノウハウならぬbatノウハウです。忘れたことにやってくるbat作成のために良さそうなノウハウを見つけ次第追記します。(何かあったら教えてくださいな)echoさせない行頭に@を付けても出…

コメント

タイトルとURLをコピーしました