<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; CMD/BAT: BenchMark времени выполнения]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7931</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7931&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: BenchMark времени выполнения».]]></description>
		<lastBuildDate>Tue, 01 Jan 2013 07:23:25 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: BenchMark времени выполнения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68097#p68097</link>
			<description><![CDATA[<p>Вариант, как избежать эту ошибку:</p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

call :gettick
echo Tick Count: %errorlevel%

pause
exit /b 0

:gettick
:: Количество сотых долей секунды, прошедших с начала дня
setlocal
set t=%time: =0%
set /a tick=1%t:~9,2%-100+(1%t:~6,2%-100)*100+(1%t:~3,2%-100)*6000+(1%t:~0,2%-100)*360000
endlocal &amp; exit /b %tick%</code></pre></div><p>Функция gettick возвращает количество сотых долей секунды, прошедших с начала дня. Чтобы не появилось &quot;восьмеричных&quot; чисел, я дописываю к каждой компоненте времени в начало 1, а затем вычитаю 100. Таким образом проблема решается без введение дополнительных поверок if.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 01 Jan 2013 07:23:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68097#p68097</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: BenchMark времени выполнения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68094#p68094</link>
			<description><![CDATA[<p>Тут скрывается неприятная ошибка: <strong>set /a T1 = (h1*360000)+(m1*6000)+(s1*100)+ms1</strong><br />m1, s1 и ms1 могут начинаться с нуля (например, time = 12:03:09,07<br />Числа, начинающиеся с нуля, воспринимаются как восмеричные. И если с числами 03 и 07 проблем не будет, то на 09 cmd ответит так:</p><div class="quotebox"><blockquote><p>Неправильное число. Числовые константы должны быть де<br />шестнадцатеричными (0x11),или восьмеричными (021).</p></blockquote></div><p>Ну и идея небольшой оптимизации. Вместо такого:</p><div class="codebox"><pre><code>set /a H = T3/360000
set /a T3 -= (H*360000)</code></pre></div><p>Можно писать так:</p><div class="codebox"><pre><code>set /a H = T3/360000
set /a T3 %%= 360000</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Tue, 01 Jan 2013 03:52:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68094#p68094</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: BenchMark времени выполнения]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=68051#p68051</link>
			<description><![CDATA[<p><em><span style="color: gray">Ёу-хоу-хоу, а вот и дед Мороз с подарками <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Вот и подошла к концу астрологическая эра Рыб, а вместе с ней и &quot;Ночь Сварога&quot;, с сопутствующим ей &quot;ментальным сном&quot;. Давайте ворвёмся в Чертог Волка с радостным настроением. В путь товар&#039;ищи.<br />С наступающим 2013!</span></em></p><br /><p>Представляю вашему вниманию уникальную разработку. Это преполезнейший <strong><em>отладочный</em></strong> скрипт!<br />Он может быть использован как при&nbsp; разработке/доводке/отладке/выборе алгоритма (<strong>поиске оптимального пути</strong>), так и при повседневном использовании.</p><p>Суть такова: у нас есть некое действо, которое надо выполнить, и затем показать сколько это действо затратило времени (<em>а потом сравнить с подобным и выбрать самое быстрое, например</em>)</p><p>&quot;Действо&quot; задаётся параметром запуска скрипта: команда, последовательность команд (через &amp; и Ко.), программа или скрипт.</p><p><strong>spendRunTimer.bat</strong> команда_скрипт_или_программа [параметы]</p><p>Для того чтобы использовать&nbsp; разделитель-амперсенд и операторы перенаправления (&amp;,&lt;,&gt;,|) как часть исследуемой последовательности команд, перед ними необходимо записать три шляпы: <strong>^^^</strong><span style="color: blue">&amp;</span>,<strong>^^^</strong><span style="color: blue">&gt;</span>NUL,...<br />Например, если требуется подавить вывод исследуемой команды, и только замерить время, то следует запускать с таким параметром:<br /></p><div class="quotebox"><blockquote><p><strong>spendRunTimer</strong> COMMAND ^^^&gt;NUL</p></blockquote></div><div class="quotebox"><blockquote><p>&gt;spendRunTimer.bat PING -n 2 LOCALHOST ^^^&gt;nul<br />______________________________<br />Spending of RunTime = [00:00:01,09]<br />...<br />&gt;spendRunTimer.bat echo Ascetic technologies<br />Ascetic technologies<br />______________________________<br />Spending of RunTime = [00:00:00,00]</p></blockquote></div><p><strong>spendRunTimer.bat:</strong><br /></p><div class="quotebox"><blockquote><p>::	[Examples]<br />::			command:						spendRunTimer dir<br />::			program:						spendRunTimer program.exe [params]<br />::			script:							spendRunTimer mybatch.cmd<br />::			using caps for &quot;&lt;,&gt;,|,&amp;&quot; :		spendRunTimer COMMAND ^^^&gt;NUL</p></blockquote></div><div class="codebox"><pre><code>::@================================================================
::    Name:         SpendRunTimer.bat (SRT)
::    Language:     Win-batch
::    CommandLine: spendRunTimer.bat [Any Commandline]
::    Author:         Аскет, 2009-2011. [true-script(at)ya.ru]
::    last upd:     31/12/2012 г.
::    Description: This debugging script is intended for remark of time, spent
::                     on execution other script or any command.
::                    Precision: milisecond.
::                    Single faithfull way of at searching of optimum solution.
::    Using:        For &quot;one-string&quot; inline scripts and specific command you must screening control symbols three caps &quot;^^^&quot;
::
::    [Examples]
::            command:                        spendRunTimer 
::            program:                        spendRunTimer program.exe [params]
::            script:                            spendRunTimer mybatch.cmd
::            using caps for &quot;&lt;,&gt;,|,&amp;&quot; :        spendRunTimer COMMAND ^^^&gt;NUL
::            inline-script:                    spendRunTimer ping -n 6 localhost^^^&gt;nul ^^^&amp; echo WelcomTo! ^^^&amp; msg * hello world!
::            OR:                            spendRunTimer (echo EHLO HELLO WORLD! ^^^&amp; msg * hello world!^^^&amp; NET SEND * HELLO WORLD!^^^&amp; NET SEND * HELLO %^USERNAME%,  %USERNAME% IS WATCHING YOU! SHUTDOWN YOUR PC!)
::@================================================================
@echo off
SET CMD=%*
IF NOT DEFINED CMD (EXIT /B)
=================:: [MAIN] ::========================
SET T1=%time%

%CMD%

SET T2=%time%
:: But you should know the Russian language! Because english - wrong and ugly language. So has said Master.
==================:: [/MAIN] ::========================

    ::--------------- РАЗБИЕНИЕ МЕТОК ВРЕМЕНИ НА РАЗРЯДЫ [чч,мм,сс] -------------
for /f &quot;tokens=1-4 delims=:,&quot; %%a in (&quot;%T1%&quot;) do (set h1=%%a &amp; set m1=%%b &amp; set s1=%%c &amp; set ms1=%%d)
for /f &quot;tokens=1-4 delims=:,&quot; %%a in (&quot;%T2%&quot;) do (set h2=%%a &amp; set m2=%%b &amp; set s2=%%c &amp; set ms2=%%d)
    ::--------------- СЕРИАЛИЗАЦИЯ -------------
set /a T1 = (h1*360000)+(m1*6000)+(s1*100)+ms1
set /a T2 = (h2*360000)+(m2*6000)+(s2*100)+ms2
    ::--------------- ВЫЧИСЛЕНИЕ -------------
set /a T3 = T2-T1
    ::--------------- ДеСЕРИАЛИЗАЦИЯ [muchSS -&gt; hh,mm,ss] -------------
    ::hour
set /a H = T3/360000
set /a T3 -= (H*360000)
    ::minute
set /a M = T3/6000
set /a T3 -= (M*6000)
    ::second
set /a S = T3/100
    ::milisecond
set /a MS = T3-(S*100)
    ::--------------- ФОРМАТНАЯ КОРРЕКТИРОВКА РЕЗУЛЬТАТОВ -------------
 CALL :CheckNum %H%,H
 CALL :CheckNum %M%,M
 CALL :CheckNum %S%,S
 CALL :CheckNum %MS%,MS

set spendRunTime=%H%:%M%:%S%,%MS%
::show result
echo ______________________________
ECHO/Spending of RunTime = [%spendRunTime%]


EXIT /B
======================
:CheckNum (varIN,varOUT)
    set /A temp_ = %1
    if &quot;%temp_:~1,1%&quot;==&quot;&quot; (SET %2=0%temp_%)
EXIT /B
======================</code></pre></div><p>На самом деле он короче, чем кажется, - комментарии.</p>]]></description>
			<author><![CDATA[null@example.com (Аскет)]]></author>
			<pubDate>Sun, 30 Dec 2012 21:27:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=68051#p68051</guid>
		</item>
	</channel>
</rss>
