Как измерить время выполнения команды в командной строке Windows? - PullRequest
441 голосов
/ 23 марта 2009

Существует ли встроенный способ измерения времени выполнения команды в командной строке Windows?

Ответы [ 29 ]

423 голосов
/ 26 января 2011

В качестве альтернативы, в Windows PowerShell есть встроенная команда, аналогичная команде Bash «time» Это называется «Мера-Команда». Вы должны убедиться, что PowerShell установлен на компьютере, на котором он запущен.

Пример ввода:

Measure-Command {echo hi}

Пример вывода:

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 0
Ticks             : 1318
TotalDays         : 1.52546296296296E-09
TotalHours        : 3.66111111111111E-08
TotalMinutes      : 2.19666666666667E-06
TotalSeconds      : 0.0001318
TotalMilliseconds : 0.1318
260 голосов
/ 02 июня 2011

Если хотите

  1. Чтобы измерить время выполнения с точностью до сотой секунды в формате (чч: мм: сс.фф)
  2. Чтобы не пришлось скачивать и устанавливать пакет ресурсов
  3. Чтобы выглядеть как огромный ботаник DOS (который не делает)

Попробуйте скопировать следующий скрипт в новый пакетный файл (например, timecmd.bat ):

@echo off
@setlocal

set start=%time%

:: Runs your command
cmd /c %*

set end=%time%
set options="tokens=1-4 delims=:.,"
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100

set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
if %hours% lss 0 set /a hours = 24%hours%
if 1%ms% lss 100 set ms=0%ms%

:: Mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo command took %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)

Использование

Если вы поместите timecmd.bat в каталог вашего пути, вы можете вызвать его из любого места, например:

timecmd [your command]

* 1023 Е.Г. *

C:\>timecmd pause
Press any key to continue . . .
command took 0:0:1.18

Если вы хотите сделать перенаправление вывода, вы можете заключить команду в кавычки так:

timecmd "dir c:\windows /s > nul"

Это должно обрабатывать команды, которые выполняются до - после полуночи, но вывод будет неверным, если ваша команда будет работать в течение 24 часов или более.

208 голосов
/ 10 марта 2010

Хе-хе, самое простое решение может быть таким:

echo %time%
YourApp.exe
echo %time%

Это работает на каждой Windows из коробки.

<Ч />

В случае приложения, использующего вывод консоли, может быть удобно сохранить время запуска во временной переменной:

set startTime=%time%
YourApp.exe
echo Start Time: %startTime%
echo Finish Time: %time%
106 голосов
/ 15 апреля 2009

Если вы используете Windows 2003 (обратите внимание, что Windows Server 2008 и более поздние версии не поддерживаются), вы можете использовать Windows Server 2003 Resource Kit, который содержит timeit.exe, который отображает подробную статистику выполнения. Вот пример времени команды «timeit -?»:

C:\>timeit timeit -?
Invalid switch -?
Usage: TIMEIT [-f filename] [-a] [-c] [-i] [-d] [-s] [-t] [-k keyname | -r keyname] [-m mask] [commandline...]
where:        -f specifies the name of the database file where TIMEIT
                 keeps a history of previous timings.  Default is .\timeit.dat
              -k specifies the keyname to use for this timing run
              -r specifies the keyname to remove from the database.  If
                 keyname is followed by a comma and a number then it will
                 remove the slowest (positive number) or fastest (negative)
                 times for that keyname.
              -a specifies that timeit should display average of all timings
                 for the specified key.
              -i specifies to ignore non-zero return codes from program
              -d specifies to show detail for average
              -s specifies to suppress system wide counters
              -t specifies to tabular output
              -c specifies to force a resort of the data base
              -m specifies the processor affinity mask

Version Number:   Windows NT 5.2 (Build 3790)
Exit Time:        7:38 am, Wednesday, April 15 2009
Elapsed Time:     0:00:00.000
Process Time:     0:00:00.015
System Calls:     731
Context Switches: 299
Page Faults:      515
Bytes Read:       0
Bytes Written:    0
Bytes Other:      298

Вы можете получить TimeIt в Windows 2003 Resource Kit. Загрузить здесь .

80 голосов
/ 30 августа 2015

Просто небольшое расширение ответ от Casey.K об использовании Measure-Command из PowerShell :

  1. Вы можете вызвать PowerShell из стандартной командной строки, например:

    powershell -Command "Measure-Command {echo hi}"
    
  2. Это будет использовать стандартный вывод, но вы можете предотвратить это, добавив | Out-Default, как это из PowerShell:

    Measure-Command {echo hi | Out-Default}
    

    Или из командной строки:

    powershell -Command "Measure-Command {echo hi | Out-Default}"
    

Конечно, вы можете обернуть это в файл сценария *.ps1 или *.bat.

51 голосов
/ 24 июня 2010

Однострочник, который я использую в Windows Server 2008 R2:

cmd /v:on /c "echo !TIME! & *mycommand* & echo !TIME!"

Пока mycommand не требует кавычек (какие винты с обработкой кавычек cmd). /v:on должен позволять оценивать два разных значения ВРЕМЕНИ независимо, а не один раз при выполнении команды.

46 голосов
/ 23 марта 2009

Если у вас открыто окно команд и вы вызываете команды вручную, вы можете отображать временную метку в каждом приглашении, например,

prompt $d $t $_$P$G

Это дает вам что-то вроде:

23.03.2009 15:45:50,77

C:\>

Если у вас есть небольшой пакетный скрипт, который выполняет ваши команды, перед каждой командой ставьте пустую строку, например,

(пустая строка)

myCommand.exe

(следующая пустая строка)

myCommand2.exe

Вы можете рассчитать время выполнения каждой команды по информации о времени в приглашении. Лучше всего, вероятно, направить вывод в текстовый файл для дальнейшего анализа:

MyBatchFile.bat > output.txt
25 голосов
/ 02 июня 2011

Поскольку другие рекомендуют устанавливать такие вещи, как бесплатные программы и PowerShell, вы также можете установить Cygwin , который предоставит вам доступ ко многим основным командам Unix, таким как time :

abe@abe-PC:~$ time sleep 5

real    0m5.012s
user    0m0.000s
sys 0m0.000s

Не уверен, сколько накладных расходов добавляет Cygwin.

21 голосов
/ 23 марта 2009

Не так элегантно, как некоторые функции в Unix, но создайте cmd-файл, который выглядит следующим образом:

@echo off
time < nul
yourexecutable.exe > c:\temp\output.txt
time < nul
rem on newer windows system you can try time /T

Это будет отображать время запуска и остановки следующим образом:

The current time is: 10:31:57.92
Enter the new time:
The current time is: 10:32:05.94
Enter the new time:
17 голосов
/ 03 августа 2009

Я использую бесплатное ПО под названием «GS Timer».

Просто создайте командный файл так:

timer
yourapp.exe
timer /s

Если вам нужно несколько раз, просто перенаправьте вывод timer / s в текстовый файл.

Вы можете получить его здесь: Бесплатные утилиты Gammadyne для DOS


Разрешение составляет 0,1 секунды.

...