Я обычно использую
echo.|time & my_command & echo.|time
когда у меня больше ничего нет под рукой. Это приводит к выводу, подобному следующему:
> echo. | time & ping -n 4 localhost> nul & echo. | time
Текущее время: 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
как и). Произведенная продукция похожа. Перенаправление не будет работать, хотя.