How do I measure execution time of a command on the Windows command line?

后端 未结 30 2948
南笙
南笙 2020-11-22 09:44

Is there a built-in way to measure execution time of a command on the Windows command line?

30条回答
  •  渐次进展
    2020-11-22 10:20

    "Lean and Mean" TIMER with Regional format, 24h and mixed input support
    Adapting Aacini's substitution method body, no IF's, just one FOR (my regional fix)

    1: File timer.bat placed somewhere in %PATH% or the current dir

    @echo off & rem :AveYo: compact timer function with Regional format, 24-hours and mixed input support
    if not defined timer_set (if not "%~1"=="" (call set "timer_set=%~1") else set "timer_set=%TIME: =0%") & goto :eof
    (if not "%~1"=="" (call set "timer_end=%~1") else set "timer_end=%TIME: =0%") & setlocal EnableDelayedExpansion
    for /f "tokens=1-6 delims=0123456789" %%i in ("%timer_end%%timer_set%") do (set CE=%%i&set DE=%%k&set CS=%%l&set DS=%%n)
    set "TE=!timer_end:%DE%=%%100)*100+1!"     & set "TS=!timer_set:%DS%=%%100)*100+1!"
    set/A "T=((((10!TE:%CE%=%%100)*60+1!%%100)-((((10!TS:%CS%=%%100)*60+1!%%100)" & set/A "T=!T:-=8640000-!"
    set/A "cc=T%%100+100,T/=100,ss=T%%60+100,T/=60,mm=T%%60+100,hh=T/60+100"
    set "value=!hh:~1!%CE%!mm:~1!%CE%!ss:~1!%DE%!cc:~1!" & if "%~2"=="" echo/!value!
    endlocal & set "timer_end=%value%" & set "timer_set=" & goto :eof
    

    Usage:
    timer & echo start_cmds & timeout /t 3 & echo end_cmds & timer
    timer & timer "23:23:23,00"
    timer "23:23:23,00" & timer
    timer "13.23.23,00" & timer "03:03:03.00"
    timer & timer "0:00:00.00" no & cmd /v:on /c echo until midnight=!timer_end!
    Input can now be mixed, for those unlikely, but possible time format changes during execution

    2: Function :timer bundled with the batch script (sample usage below):

    @echo off
    set "TIMER=call :timer" & rem short macro
    echo.
    echo EXAMPLE:
    call :timer
    timeout /t 3 >nul & rem Any process here..
    call :timer
    echo.
    echo SHORT MACRO:
    %TIMER% & timeout /t 1 & %TIMER% 
    echo.
    echo TEST INPUT:
    set "start=22:04:04.58"
    set "end=04.22.44,22"
    echo %start% ~ start & echo %end% ~ end
    call :timer "%start%"
    call :timer "%end%"
    echo.
    %TIMER% & %TIMER% "00:00:00.00" no 
    echo UNTIL MIDNIGHT: %timer_end%
    echo.
    pause 
    exit /b
    

    :: to test it, copy-paste both above and below code sections

    rem :AveYo: compact timer function with Regional format, 24-hours and mixed input support 
    :timer Usage " call :timer [input - optional] [no - optional]" :i Result printed on second call, saved to timer_end 
    if not defined timer_set (if not "%~1"=="" (call set "timer_set=%~1") else set "timer_set=%TIME: =0%") & goto :eof
    (if not "%~1"=="" (call set "timer_end=%~1") else set "timer_end=%TIME: =0%") & setlocal EnableDelayedExpansion
    for /f "tokens=1-6 delims=0123456789" %%i in ("%timer_end%%timer_set%") do (set CE=%%i&set DE=%%k&set CS=%%l&set DS=%%n)
    set "TE=!timer_end:%DE%=%%100)*100+1!"     & set "TS=!timer_set:%DS%=%%100)*100+1!"
    set/A "T=((((10!TE:%CE%=%%100)*60+1!%%100)-((((10!TS:%CS%=%%100)*60+1!%%100)" & set/A "T=!T:-=8640000-!"
    set/A "cc=T%%100+100,T/=100,ss=T%%60+100,T/=60,mm=T%%60+100,hh=T/60+100"
    set "value=!hh:~1!%CE%!mm:~1!%CE%!ss:~1!%DE%!cc:~1!" & if "%~2"=="" echo/!value!
    endlocal & set "timer_end=%value%" & set "timer_set=" & goto :eof
    

    CE,DE and CS,DS stand for colon end, dot end and colon set, dot set - used for mixed format support

提交回复
热议问题