2018年3月2日 星期五

cmd 批次檔 bat 如何計時程式跑多少時間

cmd 批次檔 bat 如何計時程式跑多少時間

想要計算批處理到底跑了多久時間,可以參考下面範例
寫好的 function 可以直接 call 來用
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
:: 取得參數指令
SET INSTR=
FOR %%I IN (%*) DO (
    SET "INSTR=!INSTR!%%I "
)

call :TimerStart
:: 開始執行程式
::%INSTR%
timeout /t 1
call :TimerEnd

call :TimerStart
始執行程式
::%INSTR%
timeout /t 2
call :TimerEnd

exit

Rem <================================================
:TimerStart
Rem -------------------------------------------------
rem 取得開始時間
SET A=%TIME%
goto :eof
Rem -------------------------------------------------

Rem <================================================
:TimerEnd
Rem -------------------------------------------------
rem 取得結束時間
SET B=%TIME%

rem 取得時間詳細資料
SET A_HOUR=%A:~0,2%
SET A_MINS=%A:~3,2%
SET A_SECS=%A:~6,2%
SET A_MSEC=%A:~9,2%

SET B_HOUR=%B:~0,2%
SET B_MINS=%B:~3,2%
SET B_SECS=%B:~6,2%
SET B_MSEC=%B:~9,2%

rem FOR debug
rem echo.
rem echo START TIME:%A%
rem echo END   TIME:%B%
rem echo %A_HOUR%:%A_MINS%:%A_SECS%.%A_MSEC%
rem echo %B_HOUR%:%B_MINS%:%B_SECS%.%B_MSEC%

rem 計算耗時
SET /A C_MSEC=B_MSEC-A_MSEC
SET /A C_SECS=B_SECS-A_SECS
SET /A C_MINS=B_MINS-A_MINS
SET /A C_HOUR=B_HOUR-A_HOUR

rem 調整數值
IF %C_MSEC% LSS 0  SET /A C_MSEC+=100 & SET /A C_SECS-=1
IF %C_MSEC% LSS 10 SET C_MSEC=0%C_MSEC%

IF %C_SECS% LSS 0  SET /A C_SECS+=60  & SET /A C_MINS-=1
IF %C_SECS% LSS 10 SET C_SECS=0%C_SECS%

IF %C_MINS% LSS 0  SET /A C_MINS+=60  & SET /A C_HOUR-=1
IF %C_MINS% LSS 10 SET C_MINS=0%C_MINS%

IF %C_HOUR% LSS 0  SET /A C_HOUR+=24
IF %C_HOUR% LSS 10 SET C_HOUR=0%C_HOUR%

echo TimeIs: %C_HOUR%:%C_MINS%:%C_SECS%.%C_MSEC%

ENDLOCAL
goto :eof
Rem -------------------------------------------------

沒有留言:

張貼留言