Usualmente estoy usando
echo.|time & my_command & echo.|time
cuando no tengo nada más a la mano. Esto provoca resultados como los siguientes:
> echo. | time & ping -n 4 localhost> nul & echo. | time
La hora actual es: 18: 42: 34,63
Ingrese la nueva hora:
La hora actual es: 18: 42: 37,68
Ingrese la nueva hora:
No es bonito y se puede hacer más bonito canalizando a findtr:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
Si tiene la expansión retrasada habilitada de manera predeterminada (o inició cmd /v:on
como argumento), también puede usarla echo !time!
sin tener que recurrir a hacks feos con redirección de entrada.
Si desea utilizar un archivo por lotes, puede hacerlo así:
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
He agregado la redirección a nul para stdout y stderr aquí, porque de lo contrario podría ser difícil encontrar las líneas de inicio y final. Puede eliminar esto si esto no le preocupa.
Pero hoy en día uso principalmente TimeThis , que por ahora fue eliminado, lamentablemente.
PowerShell también ofrece una manera:
Measure-Command { my_command }
pero debe tener cuidado con las cosas que dependen del directorio de trabajo o la redirección. Para que funcionen correctamente, es posible que necesite un pequeño truco:
@echo off
setlocal enableextensions
rem Prepare current directory and command line so they
rem can be stuck into a single-quoted PowerShell string.
set "Dir=%CD:'=''%"
set "Cmd=%*"
set "Cmd=%Cmd:'=''%"
rem Prepare command to pass to PowerShell
set Command=
set "Command=&{"
set "Command=%Command% Set-Location '%Dir%'"
set "Command=%Command%; [Environment]::CurrentDirectory = '%Dir%'"
set "Command=%Command%; $start = Get-Date"
set "Command=%Command%; Write-Host ' Command line : %Cmd%'"
set "Command=%Command%; Write-Host (' Start time : ' + $start.ToString())"
set "Command=%Command%; Write-Host"
set "Command=%Command%; iex 'cmd /c %Cmd%'"
set "Command=%Command%; $end = Get-Date"
set "Command=%Command%; Write-Host"
set "Command=%Command%; Write-Host ' Command line : %Cmd%'"
set "Command=%Command%; Write-Host (' Start time : ' + $start.ToString())"
set "Command=%Command%; Write-Host (' End time : ' + $end.ToString())"
set "Command=%Command%; Write-Host (' Elapsed time : ' + ($end - $start).ToString())"
set "Command=%Command%; }"
powershell -noprofile -command "%Command%"
endlocal
Esto se puede ejecutar de la misma manera que timethis
, asegúrese de escapar de las comillas dobles \"
si son necesarias en la línea de comando (igual timethis
que también). La salida producida es similar. Sin embargo, las redirecciones no funcionarán.