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

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


PowerShell has a cmdlet for this called Measure-Command. You'll have to ensure that PowerShell is available on the machine that runs it.

PS> Measure-Command { echo hi }Days              : 0Hours             : 0Minutes           : 0Seconds           : 0Milliseconds      : 0Ticks             : 1318TotalDays         : 1.52546296296296E-09TotalHours        : 3.66111111111111E-08TotalMinutes      : 2.19666666666667E-06TotalSeconds      : 0.0001318TotalMilliseconds : 0.1318

Measure-Command captures the command's output. You can redirect the output back to your console using Out-Default:

PS> Measure-Command { echo hi | Out-Default }hiDays              : 0...

As Makotoe commented, Measure-Command returns a TimeSpan object, so the measured time is printed as a bunch of fields. You can format the object into a timestamp string using ToString():

PS> (Measure-Command { echo hi | Out-Default }).ToString()hi00:00:00.0001318

If the command inside Measure-Command changes your console text color, use [Console]::ResetColor() to reset it back to normal.


If you want

  1. To measure execution time down to the hundredth of a second in (hh:mm:ss.ff format)
  2. To not have to download and install a resource pack
  3. To look like a huge DOS nerd (who doesn't)

Try copying the following script into a new batch file (e.g. timecmd.bat):

@echo off@setlocalset start=%time%:: Runs your commandcmd /c %*set end=%time%set options="tokens=1-4 delims=:.,"for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100set /a hours=%end_h%-%start_h%set /a mins=%end_m%-%start_m%set /a secs=%end_s%-%start_s%set /a ms=%end_ms%-%start_ms%if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%if %hours% lss 0 set /a hours = 24%hours%if 1%ms% lss 100 set ms=0%ms%:: Mission accomplishedset /a totalsecs = %hours%*3600 + %mins%*60 + %secs%echo command took %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)

Usage

If you put timecmd.bat in a directory in your path, you can call it from anywhere like this:

timecmd [your command]

E.g.

C:\>timecmd pausePress any key to continue . . .command took 0:0:1.18

If you want to do output redirection, you can quote the command like this:

timecmd "dir c:\windows /s > nul"

This should handle commands that run from before- to after-midnight, but the output will be wrong if your command runs for 24 hours or more.


Hehe, the most simple solution might be this:

echo %time%YourApp.exeecho %time%

This works on every Windows out of the box.


In case of an application using console output, it might be convenient to store the starting time in a temporary variable:

set startTime=%time%YourApp.exeecho Start Time: %startTime%echo Finish Time: %time%