¿Cómo mido el tiempo de ejecución de un comando en la línea de comandos de Windows?
¿Existe una forma integrada de medir el tiempo de ejecución de un comando en la línea de comandos de Windows?
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-Command
captura 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 TimeSpan
objeto, 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-Command
cambia el color del texto de su consola, utilícelo [Console]::ResetColor()
para restablecerlo a la normalidad.
Si quieres
- Para medir el tiempo de ejecución hasta la centésima de segundo en (formato hh:mm:ss.ff)
- Para no tener que descargar e instalar un paquete de recursos
- 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.