(参考)開発に役立つBATファイルの書き方・パターン集
雛形
基本形
@echo off
rem
rem このバッチの説明
rem
rem 設定事項
set hoge="変数の値"
rem このバッチが存在するフォルダをカレントに
pushd %0\..
cls
〜処理〜
pause
exit 0
- コマンドの先頭に@をつければ,バッチ実行時に,そのコマンド自体は表示されなくなる。
- echo offとすれば,実行しているコマンド自体の表示を全面的にOFFにできる。
- pushdは,ディレクトリの移動。cdコマンドだと,異なるドライブに移動できない。
- %0 は,このバッチファイルのファイルパス。
反復系
@echo off
:start
cls
rem ----- メイン処理 -----
〜〜
rem ----- キー入力で分岐 -----
echo.
set userkey=
set /p userkey=終了する (Enter) / メイン処理を再度実行 (o + Enter) / サブ処理を実行 (p + Enter) ?
if not '%userkey%'=='' set userkey=%userkey:~0,1%
if '%userkey%'=='o' goto start
if '%userkey%'=='p' goto exec
goto quit
rem ----- サブ処理 -----
:exec
〜〜
rem ----- 終了 -----
:quit
exit
- コロンで始まる行は,ラベル。gotoで,ラベルにジャンプすることができる。
- set /p は,ユーザ入力値を環境変数に格納する。
構造化
ルーチンの分割
@echo off
rem メイン処理:サブルーチンのテスト
call :routine_hello hoge
call :routine_hello fuga
call :routine_hello boo
pause
rem メイン処理はここで終了
exit
rem 引数を受け取って,Hello と表示するルーチン。
:routine_hello
echo Hello, %1!
exit /b
- ラベルをgotoではなくcallで呼び出せば,サブルーチンになる。
- サブルーチンには,そのサブルーチン独自の引数を渡すことが可能。
- サブルーチン内では%1などで参照。
- サブルーチンからメインルーチンに戻る際には,exit /b する。/b オプションを付けないと,バッチ全体が終了してしまう。
- ルーチンからの戻り値について,数値しか返却できず,大したことはできない。
- バッチ内のルーチンから,呼び出し元に値を返却するには,errorlevelを使う。
実行ファイルや実行プロセスの分割
- .batファイル自体を分割。
- 呼び出し方法には2つある:
call バッチファイル名
start バッチファイル名
- callでラベルを指定すればサブルーチンを呼び出せたのと同じように,別バッチを呼び出せる。
- startで呼び出した場合は,プロセスも分かれる。
小ネタ
日付処理
set date_tmp=%date:/=%
set time_tmp=%time: =0%
set yyyy=%date_tmp:~0,4%
set yy=%date_tmp:~2,2%
set mm=%date_tmp:~4,2%
set dd=%date_tmp:~6,2%
set hh=%time_tmp:~0,2%
set mi=%time_tmp:~3,2%
set ss=%time_tmp:~6,2%
set sss=%time_tmp:~9,2%
rem yyyymmddhhmisssss
set datetime=%yyyy%%mm%%dd%%hh%%mi%%ss%%sss%
rem yyyy/mm/dd hh:mi:ss:sss
set datetime=%yyyy%/%mm%/%dd% %hh%:%mi%:%ss%:%sss%