Eu normalmente estou usando
echo.|time & my_command & echo.|time
quando não tenho mais nada em mãos. Isso causa uma saída como a seguinte:
> eco. | hora e ping -n 4 localhost> nul e eco. | hora
O horário atual é: 18: 42: 34,63
Digite o novo horário:
O horário atual é: 18: 42: 37,68
Digite o novo horário:
Não é bonito e pode ser mais bonito canalizando para findstr:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
Se você atrasou a expansão ativada por padrão (ou iniciou o cmd com /v:on
o argumento), você também pode usar echo !time!
sem precisar recorrer a hacks feios com redirecionamento de entrada.
Se você deseja usar um arquivo em lotes, pode fazê-lo assim:
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
Eu adicionei redirecionamento para nul para stdout e stderr aqui, porque, caso contrário, pode ser difícil encontrar as linhas de início e de fim. Você pode removê-lo se isso não lhe interessar.
Mas hoje em dia uso principalmente o TimeThis - que até agora foi removido, infelizmente.
O PowerShell também oferece uma maneira:
Measure-Command { my_command }
mas você precisa ter cuidado com as coisas que dependem do diretório de trabalho ou do redirecionamento. Para que funcionem corretamente, você pode precisar de alguns truques:
@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
Isso pode ser executado da mesma maneira que timethis
, evite aspas duplas \"
se forem necessárias na linha de comando (o mesmo timethis
também). A saída produzida é semelhante. Os redirecionamentos não funcionarão, no entanto.