このページでは、batファイルの任意の処理に要した時間を計測し、表示するプログラムをご紹介します。
早速ですがプログラム本体です。
@echo off
:Main
call :GetStartTime
call :GetEndTime
call :PutTime
pause >nul
exit
:GetStartTime
rem 開始時刻の取得
set T=%TIME: =0%
set H=%T:~0,2%
set M=%T:~3,2%
set S=%T:~6,2%
set C=%T:~9,2%
rem 先頭が0の数値が8進数として扱われないようにするための処理
set /a H=1%H%-100,M=1%M%-100,S=1%S%-100,C=1%C%-100
exit /b 0
:GetEndTime
rem 終了時刻の取得
set T1=%TIME: =0%
set H1=%T1:~0,2%
set M1=%T1:~3,2%
set S1=%T1:~6,2%
set C1=%T1:~9,2%
rem 先頭が0の数値が8進数として扱われないようにするための処理
set /a H1=1%H1%-100,M1=1%M1%-100,S1=1%S1%-100,C1=1%C1%-100
rem 処理時間の計算
set /a H2=H1-H,M2=M1-M
if %M2% LSS 0 set /a H2=H2-1,M2=M2+60
set /a S2=S1-S
if %S2% LSS 0 set /a M2=M2-1,S2=S2+60
set /a C2=C1-C
if %C2% LSS 0 set /a S2=S2-1,C2=C2+100
if %C2% LSS 10 set C2=0%C2%
exit /b 0
:PutTime
rem 開始・終了時刻と処理時間の表示
rem Hが時、Mが分、Sが秒、Cがコンマ以下2桁秒
rem 処理時間表示は適宜必要な単位のみ残して削除可
echo.
echo 開始時刻:%T%
echo 終了時刻:%T1%
echo 処理時間:%H2%h %M2%m %S2%.%C2%s
exit /b 0
詳しい解説はしません。読めばわかるはずです。
使用方法ですが、このプログラムはcall文を用いた疑似関数の構造です。
:GetStartTime
以下、:GetStartTime
・:GetEndTime
・:PutTime
の3つのラベルを丸ごと測定対象のbatファイルの任意の箇所(末尾で可)に貼りつけ、batファイル内の測定を開始したい箇所の直前にcall :GetStartTime
、測定を終了したい箇所の直後にcall :GetEndTime
、処理時間を表示したい箇所にcall :PutTime
と記述してください。
注意: このプログラムを使う時、プログラム内で使用されている全ての変数(T,H,M,S,C,T1,H1,M1,S1,C1,H2,M2,S2,C2)を予約語扱いとし、このプログラムを組み込むバッチファイル内の他の場所で使用しないようにするか、こちらのプログラムの変数名を他の変数名と一致しないように変更してください。
また、表示される処理時間には、このコード自体の動作時間が含まれます(主に:GetStartTime
内の計算時間)。大抵の場合で0.01秒ほどですが、1/100秒の誤差を許容しない場合は、上記プログラムのみを1つのbatファイルにして実行し、表示される処理時間がこのコードの動作時間ですので、それを見て適宜補正してください。
最後に、sawa_tsuka氏が、batファイルの各動作に要する時間の測定結果を公開されていますので、batファイルの動作時間の長さに四苦八苦している方はそちらもご覧ください。
.bat(バッチファイル)の、頻出コマンドの所要時間について
何かご指摘・ご意見などございましたら、コメントでお願いいたします。