デバッグや最適化のための試行錯誤に。
準備は、バッチの最後にこのラベルをコピペするだけ。
一部構文にミスがあり、経過時間にマイナスがついてしまうようになっていました。申し訳ありません。
このラベルをcallする時、1つ目の引数に好きな番号を指定します。
例:call :GetTime 1
そうすると、例の場合なら1番という番号に、callした瞬間の時間が記録されます。
そして、2つ目の引数にすでに記録済みの番号を指定すると、1つ目の引数の番号で記録した後、2つ目の番号を開始時間として差を表示します。
例:
call :GetTime 2 1
rem とすると、2番に現在の時間を登録、すでに取得済みの1番を始点として所要時間を計算します。
rem 例えば、1番に10時ぴったりと記録されていたとします。
rem ここで、10時20秒ぴったりで上記のコマンドが実行された場合、2番に10時20秒と登録したのち、1番→2番の時間を計測します。この場合は、
rem 開始時間:10:00:00.00
rem 終了時間:10:00:20.00
rem 経過時間:20.00sec
rem となるわけです。
当然保存するための番号に制限はないので(というより番号でなくともアルファベットでも漢字でもいい)、複数個所で時間を保存してまとめて比較表示することもできます。
一見小難しいですが、慣れれば簡単です。指定した番号のファイルにデータをセーブする、ゲームのような感じを想像すると分かりやすいかも。是非使ってみてください。
時間計測
:GetTime
rem 引数1つなら、その番号を使って時間を登録
rem 引数2つなら、1つ目の番号を使って時間を登録。そこから2つ目の番号を開始時間、1つ目の番号を終了時間として経過時間を算出・表示
set T[%1]=%TIME%
for /f "tokens=1-4 delims=:." %%a in ("!T[%1]!") do set /a MT[%1]=%%a0*36000+1%%b*6000+1%%c*100+1%%d-610100
if "%2" == "" exit /b
set /a D=MT[%1]-MT[%2]
set /a D1=%D:~0,-2%0/10,D2=10%D:~-2,2%%%100+100
echo.
echo 開始時間:!T[%2]!
echo 終了時間:!T[%1]!
echo 経過時間:%D1%.%D2:~1,2%sec
pause >nul
exit /b