Di solito lo sto usando
echo.|time & my_command & echo.|time
quando non ho nient'altro a portata di mano. Ciò provoca un output simile al seguente:
> echo. | time & ping -n 4 localhost> nul & echo. | time
L'ora corrente è: 18: 42: 34,63
Inserisci la nuova ora:
L'ora corrente è: 18: 42: 37,68
Inserisci la nuova ora:
Non carino e può essere reso più bello eseguendo il piping per findstr:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
Se hai l'espansione ritardata abilitata per impostazione predefinita (o /v:on
hai avviato cmd con come argomento) puoi anche semplicemente usare echo !time!
senza dover ricorrere a brutti hack con reindirizzamento dell'input.
Se si desidera utilizzare un file batch, è possibile farlo in questo modo:
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
Ho aggiunto il reindirizzamento a zero per stdout e stderr qui, perché altrimenti potrebbe essere difficile trovare le linee di inizio e fine. Puoi rimuoverlo se questo non ti preoccupa.
Ma oggi uso principalmente TimeThis , che ormai è stato rimosso, purtroppo.
PowerShell offre anche un modo:
Measure-Command { my_command }
ma devi fare attenzione alle cose che si basano sulla directory di lavoro o sul reindirizzamento. Perché quelli funzionino correttamente potresti aver bisogno di un piccolo trucco:
@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
Questo può essere eseguito allo stesso modo di timethis
, assicurati di sfuggire alle doppie virgolette con \"
se sono necessarie nella riga di comando (lo stesso timethis
pure). L'output prodotto è simile. Tuttavia, i reindirizzamenti non funzioneranno.