LoginSignup
6
7

More than 5 years have passed since last update.

バッチファイルで、任意の範囲の実行時間を計測する(2/3修正)

Last updated at Posted at 2016-01-20

 デバッグや最適化のための試行錯誤に。
 準備は、バッチの最後にこのラベルをコピペするだけ。

一部構文にミスがあり、経過時間にマイナスがついてしまうようになっていました。申し訳ありません。

 このラベルを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
6
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7