¿Cómo mido el tiempo de ejecución de un comando en la línea de comandos de Windows?

Resuelto Kuroki Kaze asked hace 15 años • 34 respuestas

¿Existe una forma integrada de medir el tiempo de ejecución de un comando en la línea de comandos de Windows?

Kuroki Kaze avatar Mar 23 '09 21:03 Kuroki Kaze
Aceptado

PowerShell tiene un cmdlet para esto llamado Measure-Command. Deberá asegurarse de que PowerShell esté disponible en la máquina que lo ejecuta.

PS> Measure-Command { echo hi }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 0
Ticks             : 1318
TotalDays         : 1.52546296296296E-09
TotalHours        : 3.66111111111111E-08
TotalMinutes      : 2.19666666666667E-06
TotalSeconds      : 0.0001318
TotalMilliseconds : 0.1318

Measure-Commandcaptura la salida del comando. Puede redirigir la salida a su consola usando Out-Default:

PS> Measure-Command { echo hi | Out-Default }
hi

Days              : 0
...

Como comentó MakotoeMeasure-Command , devuelve un TimeSpanobjeto, por lo que el tiempo medido se imprime como un conjunto de campos. Puede formatear el objeto en una cadena de marca de tiempo usando ToString():

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

Si el comando interno Measure-Commandcambia el color del texto de su consola, utilícelo [Console]::ResetColor()para restablecerlo a la normalidad.

Casey.K avatar Jan 26 '2011 04:01 Casey.K

Si quieres

  1. Para medir el tiempo de ejecución hasta la centésima de segundo en (formato hh:mm:ss.ff)
  2. Para no tener que descargar e instalar un paquete de recursos
  3. Para parecer un gran nerd de DOS (¿quién no?)

Intente copiar el siguiente script en un nuevo archivo por lotes (por ejemplo, timecmd.bat ):

@echo off
@setlocal

set start=%time%

:: Runs your command
cmd /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 %% 100
for /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 %% 100

set /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 accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo command took %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)

Uso

Si coloca timecmd.bat en un directorio en su ruta, puede llamarlo desde cualquier lugar como este:

timecmd [your command]

P.ej

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

Si desea realizar una redirección de salida, puede citar el comando de esta manera:

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

Esto debería manejar comandos que se ejecutan desde antes hasta después de la medianoche, pero el resultado será incorrecto si su comando se ejecuta durante 24 horas o más.

 avatar Jun 02 '2011 01:06