サンプル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させない行頭に@を付けても出…
コメント