Zwykle używam
echo.|time & my_command & echo.|time
kiedy nie mam nic więcej pod ręką. Powoduje to, że dane wyjściowe są następujące:
> echo. | time & ping -n 4 localhost> nul i echo. | time
Aktualny czas to: 18: 42: 34,63
Wpisz nowy czas:
Aktualny czas to: 18: 42: 37,68
Wpisz nowy czas:
Nie jest ładna i może być ładniejsza, przesyłając potokiem do findstr:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
Jeśli masz opóźnione rozszerzenie włączone domyślnie (lub uruchomiłeś cmd z /v:on
argumentem), możesz także użyć echo !time!
bez konieczności uciekania się do brzydkich hacków z przekierowaniem wejścia.
Jeśli chcesz użyć pliku wsadowego, możesz to zrobić w następujący sposób:
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
Dodałem przekierowanie do nul zarówno dla stdout, jak i stderr, ponieważ w przeciwnym razie znalezienie linii początkowej i końcowej może być trudne. Możesz to usunąć, jeśli nie dotyczy to ciebie.
Ale obecnie używam głównie TimeThis - który niestety został już usunięty.
PowerShell oferuje również sposób:
Measure-Command { my_command }
ale musisz uważać na rzeczy, które opierają się na katalogu roboczym lub przekierowaniu. Aby te działały poprawnie, możesz potrzebować trochę podstępu:
@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
Można to uruchomić w taki sam sposób, jak timethis
to, aby uniknąć podwójnych cudzysłowów, \"
jeśli są one potrzebne w wierszu poleceń (tak samo jak timethis
). Wytworzona produkcja jest podobna. Przekierowania nie będą jednak działać.