bat время выполнения скрипта

CMD/BAT: BenchMark времени выполнения

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 3

1 Тема от Аскет 2012-12-31 01:27:24 (изменено: Аскет, 2012-12-31 01:53:22)

Тема: CMD/BAT: BenchMark времени выполнения

Ёу-хоу-хоу, а вот и дед Мороз с подарками bat время выполнения скрипта
Вот и подошла к концу астрологическая эра Рыб, а вместе с ней и «Ночь Сварога», с сопутствующим ей «ментальным сном». Давайте ворвёмся в Чертог Волка с радостным настроением. В путь товар’ищи.
С наступающим 2013!

Представляю вашему вниманию уникальную разработку. Это преполезнейший отладочный скрипт!
Он может быть использован как при разработке/доводке/отладке/выборе алгоритма (поиске оптимального пути), так и при повседневном использовании.

Суть такова: у нас есть некое действо, которое надо выполнить, и затем показать сколько это действо затратило времени (а потом сравнить с подобным и выбрать самое быстрое, например)

«Действо» задаётся параметром запуска скрипта: команда, последовательность команд (через & и Ко.), программа или скрипт.

spendRunTimer.bat команда_скрипт_или_программа [параметы]

spendRunTimer COMMAND ^^^>NUL

spendRunTimer.bat:

Источник

Засекаем время в bat/cmd

При всех моих стараниях уйти от Windows везде и навсегда не получается. Есть компьютер на работе, компьютеры друзей, собственный нетбук, с которым неохота возиться настолько кардинально. При этом, ряд задач в принципе выполняется из командной строки проще и удобнее, чем «оконно-мышевым» способом. Особенно если это задачи из тех, что имеют прямое отношение к Linux, например, работа с утилитами из комплекта gnuwin32.

Запуская однажды уже упомянутую упаковку/распаковку при помощи windows-реализации tar, я захотел однажды засечь время. Ну, не секундомером же это делать… Сделал командный файл, в котором вывожу время, запускаю архиватор, снова вывожу время.

Получается ерунда. Команда time \t выдает время с точностью до минуты. Ладно, можно использовать переменную среды %time% :

Однако переменная %time% хитроформатированная, скорее текст, чем число, и ее в лоб не получится использовать для вычитания времени начала из времени окончания. Тем более, командный интерпретатор cmd.exe работает с целочисленными значениями, а время идет с точностью до сотых секунды (ну, или до десятков миллисекунд, как хотите).

Ладно, разберем время на составляющие. При помощи конструкции set t1_m=%t1:

3,2% которая присваивает переменной t1_m два знака из t1, пропустив первые три, получим часы, минуты, секунды и сотые доли секунды:

Напоминаю, что ключик /a позволяет оператору set не только присваивать значение переменной, но и выполнять некоторые операции (подробнее — set /? ).

В результате получили в s1 время в сотнях миллисекунд, допустим, из времени начала операции. Можно сделать аналогичным образом s2 из времени окончания. Эти две переменные целочисленные и прекрасно складываются, вычитаются и все такое. Нам надо разность, и, чтобы избежать неожиданностей со знаками, можно сразу определить, что из них больше, и потом вычитать:

Ключик /i расширяет возможности оператора сравнения, позволяя ему не только выполнять сравнение строк на тождественность (чем он занимался изначально), но и сравнивать числа на больше/меньше/равно ( if /? )

Получили s3 — разность времени в десятках миллисекунд. Надо разобрать на составляющие, а потом склеить обратно в удобочитаемом виде. Все несложно, используем остаток от деления, чтобы избавиться, например, от часов при извлечении минут, и деление (целочисленное, другого тут нет), чтобы избавиться от секунд, примерно так:

Тут надо не забыть забавную тонкость: в командном интерпретаторе символ процента — подводный камень. Иногда он ставится по обе стороны от переменной, и тогда при выполнении интерпретатор отбрасывает эту пару, а имя переменной заменяет значением. Иногда он стоит перед переменной цикла. Иногда он используется в виде оператора получения остатка от целочисленного деления. Так вот, там, где процент непарный, его надо не забывать удваивать, а то его отбросят и будут безуспешно искать пару.

Получили часы, минуты, секунды и десятки миллисекунд в отдельных переменных. Можно их использовать, как числа, а можно — как строки, поэтому их легко склеить в одно значение времени и выдать его в стандартный поток ввода-вывода, «на консоль»:

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

и передавать параметры в двойных кавычках (а тильда раскроет кавычки), либо

Итого, получился такой командный файл, скажем, timecalc.bat:

Теперь об использовании. Допустим, есть такой батничек, запускающий архивацию с засечкой времени:

В переменных a и b имеем время начала и окончания операции соответственно. Можно передать их нашему скрипту, непременно валяющемуся тут же рядом, в этой же папке:

И он выведет в консоль затраченное время третьей строчкой, после «start » и «stop ». Но хотелось бы добавить, допустим, «упаковано за » или «распаковано за », так что ввести соответствующие строки в файл «подпрограммы» не получится. Передавать этот строковый «довесок» в виде еще одного параметра и не особо красиво, и при желании дописать текст после времени (а не перед) опять потребует лезть в вызываемый файл. А как перехватить вывод вызываемого файла для использования в вызывающем?

Я просто обалдел, когда узнал. Внезапно, при помощи оператора цикла. О, сколько нам открытий чудных готовит for /? …

Расширение синтаксиса /F позволяет выковыривать переменную цикла из разного рода наборов: файлов, символьных строк, команд. Чтобы понять, что используется для цикла, применяются (или не применяются) кавычки. Без кавычек в скобках пишем файл или набор файлов. А применение кавычек зависит от того, установлена или нет опция usebackq: при установленной в двойных кавычках пишем строку, в простых — команду. При снятой опции строку пишем в простых кавычках, а команду — в обратных (которые обычно на клавише с буквой Ё). При этом, команда вполне может быть одна, и проход цикла тоже один, и в теле цикла получаем нужный нам вывод команды, который засунем в переменную для дальнейшего использования (хотя можно и использовать сразу):

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

Итого получаем такой командный файл, скажем, tar_time.cmd, который принимает в качестве параметра пакуемую папку, засекает время и пишет его в консоль и в лог-файл:

Аналогичным образом написал почти то же для распаковки, поправив пару строчек.

Возможности команд Windows (тяжелое наследие DOS), конечно, довольно ограничены, но даже с их помощью можно делать интересные и полезные штучки. Вот только иногда фиг догадаешься, описание какой команды для твоей цели нужно смотреть и где именно искать…

Источник

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

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

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

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

Применение

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

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

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

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

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

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

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

Это будет использовать стандартный вывод, но вы можете предотвратить это, добавив | Out-Default вот что из PowerShell:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Также есть TimeMem (март 2012):

Это утилита Windows, которая выполняет программу и отображает время ее выполнения, использование памяти и статистику ввода-вывода. По функциональности он похож на утилиту времени Unix.

Постфиксная версия таймера:

тайм-аут 1 | TimeIt.cmd

Скопируйте и вставьте это в какой-нибудь редактор, например Notepad ++, и сохраните его как TimeIt.cmd :

Альтернативой измерению времени является просто «Get-Date». У вас нет проблем с пересылкой вывода и так далее.

Обновить

Вот улучшенный однострочный (без отложенного расширения тоже):

Вывод выглядит примерно так:

Этот подход не включает процесс создания нового cmd в результате, и при этом он не включает prompt команду (ы).

В зависимости от версии Windows, которую вы используете, просто запуск bash переведет вас в режим Bash. Это позволит вам использовать несколько команд, которые не доступны непосредственно в PowerShell (например, time команда). Синхронизировать вашу команду теперь так же просто, как выполнить:

Примечание. Вы можете легко выйти из режима Bash и вернуться обратно в основную оболочку, запустившись exit в режиме Bash.

Это отлично сработало для меня (Windows 10) после опробования других методов (например Measure-Command ), которые иногда приводят к нежелательной статистике. Надеюсь, это работает и для вас.

Это комментарий / правка Люка Сэмпсона, хороший timecmd.bat и ответ на

В некоторых конфигурациях разделители могут отличаться. Следующее изменение должно охватывать как минимум большинство западных стран.

(* потому что сайт не позволяет оставлять комментарии и не отслеживает личность, хотя я всегда использую один и тот же гостевой адрес электронной почты, который в сочетании с ipv6 ip и отпечатком браузера браузера должен быть достаточным для однозначной идентификации без пароля)

Вот мой метод, без преобразования и без мс. Полезно определить длительность кодирования (хотя и ограниченную 24 часами):

Ответ дриблио можно сделать немного короче (хотя и не очень читабельным)

По замечанию Люка Сэмпсона, эта версия восьмерично безопасна, хотя задача должна быть выполнена за 24 часа.

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

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

Введите mytimer.bat в командной строке и нажмите Enter.

Мой код дает вам время выполнения в миллисекундах, до 24 часов, он не зависит от локали и учитывает отрицательные значения, если код выполняется до полуночи. он использует отложенное расширение и должен быть сохранен в файле cmd / bat.

перед вашим кодом:

после вашего кода:

если вы хотите время выполнения в формате ЧЧ: мм: сс.000, добавьте:

переменная t2 содержит ваше время выполнения, вы можете echo %t2% отобразить его.

После того, как Perl установит доступное решение по найму, запустите:

STDERR предшествует измеренным секундам

Использование подпрограммы для возврата времени в сотых долях секунды

1: файл timer.bat находится где-то в% PATH% или текущем каталоге

Использование:
таймер и эхо start_cmds & timeout / t 3 и эхо end_cmds и таймер
таймер и таймер «23: 23: 23,00»
таймер «23: 23: 23,00» и таймер
таймера «13.23.23,00» и таймер «03: 03: 03.00«
таймер и таймер »0: 00: 00.00« нет & cmd / v: вкл / с эхо до полуночи =! Timer_end!
Ввод теперь может быть смешанным, для тех маловероятных, но возможных изменений формата времени во время выполнения

2: Функция : таймер в комплекте с пакетным скриптом (пример использования ниже):

:: чтобы проверить это, скопируйте и вставьте выше и ниже разделы кода

Я нахожусь в EST, и сообщаемая разница составляет 4 часа, что является относительно правильным. Есть несколько интересных решений по удалению TZ и региональных зависимостей, но я не заметил ничего тривиального.

Решение с использованием чистого PHP для cmd и одного env. переменная:

нет необходимости в cygwin или ненадежных утилитах. Полезно, когда PHP доступен локально

Точность и формат вывода можно легко настроить

Источник

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

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

29 ответов

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

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

попробуйте скопировать этот скрипт в новый пакетный файл (например,timecmd.летучая мышь!—16—>):

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

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

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

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

Хе-Хе, самым простым решением может быть следующее:

это работает на всех Windows из коробки.

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

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

это съест стандартный вывод, но вы можете предотвратить это, добавив | Out-Default как это из PowerShell:

или из командной подсказка:

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

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

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

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

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

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

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

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

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

это отобразит время начала и остановки, например:

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

просто сделайте пакетный файл следующим образом:

Если вам нужен набор времен, то как раз труба выход таймера /с в А.txt-файл.

разрешение 0,1 секунды.

Я использую Windows XP и по какой-то причине timeit.exe не работает для меня. Я нашел другую альтернативу-PTIME. Это работает очень хорошо.

покуда оно не продолжает более длиной чем 24hours.

это утилита Windows, которая выполняет программу и отображает ее время выполнения, использование памяти и статистика ввода-вывода. Это похоже на функциональность утилиты времени Unix.

это ОДН-вкладыш который избегает отложенная экспансия, что может нарушить определенные команды:

обновление

здесь улучшена одну строчку (без отложенная экспансия тоже):

вывод выглядит примерно так:

этот подход не включает в себя процесс создания новой cmd в результате, и не включает в себя (ы).

версия таймера Postfix:

тайм-аут 1 / TimeIt.cmd

скопируйте и вставьте это в какой-нибудь редактор, например Блокнот++ и сохраните его как TimeIt.cmd:

этой Это комментарий / редактирование к люку Сэмпсону nice timecmd.bat и ответ

в некоторых конфигурациях разделители могут отличаться. Следующее изменение должно охватывать по крайней мере большинство западных страны.

на %time% миллисекунды работают на моей системе после добавления этого ‘,’

(*потому что сайт не позволяет комментировать anon и не отслеживает личность, хотя я всегда использую ту же гостевую электронную почту, которая в сочетании с IPv6 ip и отпечатком браузера должна быть достаточно, чтобы однозначно идентифицировать без пароля)

ответ driblio можно сделать немного короче (хотя и не очень читабельный)

до Примечание Люка Сэмпсона эта версия восьмерично безопасна, хотя задача должна быть завершена в течение 24 часов.

мой код дает вам время работы в миллисекундах, до 24 часов, он нечувствителен к локали и учитывает отрицательные значения, если код работает до полуночи. он использует отложенное расширение и должен быть сохранен в файле cmd/bat.

перед вашим кодом:

после того, как ваш код:

если вы хотите время работы в ЧЧ: мм: СС.Формат 000, добавить:

использование sub для возврата времени в сотых долях секунды

таймер»Lean and Mean» с региональным форматом, 24h и поддержкой смешанного ввода
Адаптация Aacini это тело метода замены, нет если, только один для (моего регионального исправления)

1: файл таймер.летучая мышь!—5—> помещено где-то в %PATH% или текущий dir

использование:
таймер & echo start_cmds & timeout /t 3 & echo end_cmds& таймер
таймер & таймер «23:23:23,00»
таймер «23:23:23,00» & таймер
таймер «13.23.23,00» & таймер «03:03:03.00»
таймер & таймер «0:00:00.00» нет & cmd/v: on / c echo до полуночи=!timer_end!
ввод теперь может быть смешан, для тех маловероятных, но возможных изменений формата времени во время выполнения

2: Функция :таймер в комплекте с пакетом скрипт (пример использования ниже):

::чтобы проверить его, скопируйте-вставьте как выше, так и ниже разделов кода

CE, DE и CS, DS стоят для конца двоеточия, конца точки и набора двоеточия, набора точки-используется для поддержки смешанного формата

в каталоге, где находится ваша программа, введите notepad mytimer.bat нажмите кнопку «Да», чтобы создать новый файл.

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

тип mytimer.bat в командной строке нажмите клавишу Ввод.

Процесс Explorer покажет время ядра, время пользователя и время стены (и многое другое), пока вы нажимаете на процесс до его выхода. Это не инструмент командной строки, но он очень полезен в любом случае.

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

следующий скрипт эмулирует *Nix epoch time, но он является локальным и региональным. Он должен обрабатывать случаи края календаря, включая високосные годы. Если Cygwin доступно, значения эпохи можно сравнить, указав Cygwin.

Я нахожусь в EST, и разница составляет 4 часа, что относительно правильно. Есть несколько интересных решений для удаления TZ и региональных зависимостей, но ничего тривиального я не заметил.

вот мой метод, нет преобразования и нет ms. Полезно определить длительность кодирования (ограниченную 24 часами):

альтернативой измерению времени является просто «Get-Date». У вас нет этой проблемы с пересылкой вывода и так далее.

Источник

Запустить программу и подсчитать время ее выполнения

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Есть ли способ запустить программу, ограничив время ее выполнения и потребность оперативной памяти?
Подскажите пожалуйста, есть ли способ из cmd запустить программу, при этом ограничив время.

Подсчитать время выполнения сортировки
Нужно посчитать за какой время выполнится стандартная сортировка и сортировка, написанная мной.

Подсчитать время выполнения программы
На компьютер клиента требуется переслать данные, которые должны быть отсортированы на его стороне.

А мне интересно, почему программа запускается в командной строке

Добавлено через 2 минуты

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как подсчитать время выполнения задачи?
У меня есть процедура ввода случайной послед-ти, процедура самой сортировки и процедура вывода.

bat время выполнения скриптаКак запустить внешнюю программу и не ожидать ее выполнения?
Как запустить внешнюю программу и не ожидать ее выполнения? RunCommand ждет пока запущенное.

Возможность изменять программу во время выполнения.
И всем доброго времени суток. Есть «безумная идея», но необходини коллективная помощь, думаю.

bat время выполнения скриптаКак закрыть программу во время выполнения цикла while
У меня возникла такая проблема, когда я пытаюсь закрыть программу во время выполнения while у меня.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *