関数やサブルーチンとは、特定の処理を再利用できるように部品化したもの。
部品化して再利用することで、同じ処理を何度も書かなくて良くなる。
結果として、開発作業のスピード向上やソースコードの品質向上が期待できる。
関数は呼出元に何かしらの結果を返すもの、サブルーチンは結果を返さないものという区分けで呼び分けることもあるが、同じ意味として扱われることが多い。
@echo off
setlocal
call :funcDateTime 開始
call :funcCalc 10 2
call :funcCalc 987 123
call :funcString ABCDEFGHIJKL
rem 引数の値にスペースが含まれている場合、
rem "(ダブルクォーテーション)で囲む
call :funcString "ABC DEF GHI JKL"
call :funcString あいうえおかきくけこさしすせそ
call :funcDateTime 終了
pause
exit
:funcDateTime
echo 日付/時刻取得サブルーチン
rem 「%date%」で現在日付を取得できる
rem 例:2023/08/22
rem 「%time%」で現在時刻(ミリ秒含む)を取得できる
rem 時分秒部分が1桁(0時~9時など)の場合、
rem 前ゼロではなくスペースになる
rem 例: 9: 5:16.04
rem 日付の加工
rem /(スラッシュ) 部分を削除 例:20230822
set tmpdate1=%date:/=%
rem 時刻の加工
rem 1.時分秒部分だけ取得 例: 9: 5:16
rem 2.スペースをゼロに置換 例:09:05:16
rem 3.:(コロン) 部分を削除 例:090516
set tmptime1=%time:~0,8%
set tmptime2=%tmptime1: =0%
set tmptime3=%tmptime2::=%
echo %1 %tmpdate1% %tmptime3%
rem サブルーチンを終了する
rem /B オプションが無いと、バッチ全体が終了してしまい、
rem 後続の処理が動かなくなる
exit /B 0
:funcCalc
echo 計算サブルーチン
echo 引数 %1 %2
rem 計算
set /a wa = %1 + %2
set /a sa = %1 - %2
set /a seki = %1 * %2
set /a sho = %1 / %2
set /a amari = %1 %% %2
rem 解を表示
echo 和 %wa%
echo 差 %sa%
echo 積 %seki%
echo 商 %sho%
echo 余り %amari%
exit /B 0
:funcString
echo 文字列操作サブルーチン
echo 引数 %1
rem 引数内の文字列が "(ダブルクォーテーション) で
rem 囲われている場合、「~(チルダ)」指定で外せる
set str=%~1
rem 文字列を途中から末尾まで切り出す「%str:~x%」
rem 先頭から数える場合、xは 0 から始まる(1文字目が0)
rem x+1文字目から末尾までの文字が切り出される
rem 末尾を指定する場合は -x にする
echo 3文字目から、末尾まで %str:~2%
echo 末尾から5文字 %str:~-5%
rem 文字列を部分的に切り出す「%str:~x,y%」
rem 末尾を指定する場合は -x や -y にする
echo 1文字目から、3文字分 %str:~0,3%
echo 4文字目から、2文字分 %str:~3,2%
echo 2文字目から、末尾2文字を除く %str:~1,-2%
echo 末尾5文字目から、2文字分 %str:~-5,2%
echo 末尾5文字目から、末尾2文字を除く %str:~-5,-2%
exit /B 0
