Я зазвичай використовую
echo.|time & my_command & echo.|time
коли мені нічого більше під рукою немає. Це призводить до отримання результатів, таких як:
> echo. | час & ping -n 4 localhost> nul & echo. | час
Поточний час: 18: 42: 34,63
Введіть новий час:
Поточний час: 18: 42: 37,68
Введіть новий час:
Не красиво, і їх можна зробити гарнішими, виконавши трубопровід до Findstr:
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
Якщо ви затримали розширення, включене за замовчуванням (або запустили cmd з /v:on
аргументом), ви також можете просто використовувати, echo !time!
не вдаючись до некрасивих хак з перенаправленням входу.
Якщо ви хочете використовувати пакетний файл, ви можете зробити це так:
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
Тут я додав перенаправлення на nul і для stdout, і для stderr, тому що в іншому випадку може бути важко знайти лінію початку і кінця. Ви можете видалити це, якщо це не стосується вас.
Але в даний час я в основному використовую TimeThis - який, на жаль, був видалений.
PowerShell пропонує також такий спосіб:
Measure-Command { my_command }
але вам потрібно бути обережними з речами, які покладаються на робочий каталог або перенаправлення. Для правильної роботи вам може знадобитися невелика хитрість:
@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
Це можна виконати так само, як і timethis
, не забудьте уникнути подвійних лапок, \"
якщо вони знадобляться в командному рядку (так само, timethis
як і). Вихідний результат аналогічний. Однак перенаправлення не працюватимуть.