Я обычно использую
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
как и). Произведенная продукция похожа. Перенаправление не будет работать, хотя.