Как измерить время выполнения команды в командной строке Windows?

Некоторым людям не нравится этот подход из-за «неуместного» использования обработки ошибок, но я думаю, что это считается приемлемым в VBA ... Альтернативный подход заключается в том, чтобы зацикливать все листы, пока вы не найдете совпадение.

 Function SheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

     If wb Is Nothing Then Set wb = ThisWorkbook
     On Error Resume Next
     Set sht = wb.Sheets(shtName)
     On Error GoTo 0
     SheetExists = Not sht Is Nothing
 End Function
452
задан Anthony 15 March 2018 в 04:36
поделиться

8 ответов

Если вы используете 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. Скачать это здесь .

109
ответ дан 22 November 2019 в 22:55
поделиться

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

prompt $d $t $_$P$G

Это дает Вам что-то как:

23.03.2009 15:45:50,77

C:\>

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

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

myCommand.exe

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

myCommand2.exe

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

MyBatchFile.bat > output.txt
47
ответ дан 22 November 2019 в 22:55
поделиться

Не совсем столь же изящный как часть функциональности на Unix, но создают командный файл, который похож:

@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:
22
ответ дан 22 November 2019 в 22:55
поделиться

Решение с помощью чистого PHP для cmd и одной огибающей переменной:

@echo off
setlocal enableextensions

REM set start time env var
FOR /F "tokens=* USEBACKQ" %%F IN (`php -r "echo microtime(true);"`) DO ( SET start_time=%%F )

## PUT_HERE_THE_COMMAND_TO_RUN ##

REM echo elapsed time
php -r "echo 'elapsed: ' . (round(microtime(true) - trim(getenv('start_time')), 2)) . ' seconds' . mb_convert_encoding('&#13;&#10;', 'UTF-8', 'HTML-ENTITIES');"
  • никакая потребность в cygwin или не доверял утилитам. Usefull, когда PHP локально доступен

  • точность и выходной формат, можно легко настроить

  • , та же идея может быть портирована для PowerShell

0
ответ дан 22 November 2019 в 22:55
поделиться
  1. В каталоге, где находится ваша программа, введите notepad mytimer.bat , нажмите «Да», чтобы создать новый файл.

  2. Вставьте приведенный ниже код, заменив YourApp.exe с вашей программой, затем сохраните.

     @echo off
    дата / т
    время / т
    YourApp.exe
    дата / т
    время / т
    
  3. Введите mytimer.bat в командной строке и нажмите Enter.

1
ответ дан 22 November 2019 в 22:55
поделиться

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

Просто создайте командный файл, подобный этому:

timer
yourapp.exe
timer /s

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

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


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

17
ответ дан 22 November 2019 в 22:55
поделиться

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

echo %time%
YourApp.exe
echo %time%

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


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

set startTime=%time%
YourApp.exe
echo Start Time: %startTime%
echo Finish Time: %time%
218
ответ дан 22 November 2019 в 22:55
поделиться

В Windows Server 2008 R2 я использую однострочник:

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

Пока mycommand не требует кавычек (что связано с обработкой кавычек cmd). Параметр / v: on предназначен для того, чтобы два разных значения TIME оценивались независимо, а не один раз при выполнении команды.

51
ответ дан 22 November 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: