Я обычно использую
echo.|time & my_command & echo.|time
когда у меня больше ничего нет под рукой. Это приводит к выводу, подобному следующему:
> echo.|time & ping -n 4 localhost > nul & echo.|time
The current time is: 18:42:34,63
Enter the new time:
The current time is: 18:42:37,68
Enter the new time:
Не симпатичен и может быть красивее с помощью команды 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
). Произведенная продукция похожа. Перенаправление не будет работать, хотя.