<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3689519</guid>
        <pubDate>Wed, 19 Oct 2016 12:37:28 +0000</pubDate>
        <title>Трюки в CMD</title>
        <link>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3689519</link>
        <description><![CDATA[Jin X: <div class="tag-mod"><div class="tag-mod__prefix">M</div><div class="tag-mod__body"><br>
Продолжение обсуждения задержки и PowerShell вырублено в отдельную тему&#58;<br>
<a class='tag-url' href='http&#58;//forum.sources.ru/index.php?showtopic=409754' target='_blank'>Задержка</a></div></div>]]></description>
        <author>Jin X</author>
        <category>Пакетные файлы CMD, BAT</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3688736</guid>
        <pubDate>Fri, 14 Oct 2016 19:54:09 +0000</pubDate>
        <title>Трюки в CMD</title>
        <link>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3688736</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=409721&view=findpost&p=3688668'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Jin X &#064; <time class="tag-quote__quoted-time" datetime="2016-10-14T11:07:24+00:00">14.10.16, 11:07</time></span><div class='quote '>Так?</div></div><br>
Ну да, как-то так]]></description>
        <author>JoeUser</author>
        <category>Пакетные файлы CMD, BAT</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3688668</guid>
        <pubDate>Fri, 14 Oct 2016 11:07:24 +0000</pubDate>
        <title>Трюки в CMD</title>
        <link>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3688668</link>
        <description><![CDATA[Jin X: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=409721&view=findpost&p=3688667'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2016-10-14T10:59:02+00:00">14.10.16, 10:59</time></span><div class='quote '>Задержку по фэншую (в венде) задают в виде пинга в n-повторений.</div></div>Так?<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">ping 127.0.0.1 -n 5 -w 0 &#62; nul</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>Вариант, конечно, но только если нужна задержка, кратная 1 секунде.<br>
В моём примере точность 10 мс (1/100 сек).]]></description>
        <author>Jin X</author>
        <category>Пакетные файлы CMD, BAT</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3688667</guid>
        <pubDate>Fri, 14 Oct 2016 10:59:02 +0000</pubDate>
        <title>Трюки в CMD</title>
        <link>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3688667</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=409721&view=findpost&p=3688644'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Jin X &#064; <time class="tag-quote__quoted-time" datetime="2016-10-14T08:16:12+00:00">14.10.16, 08:16</time></span><div class='quote '>Ещё один пример с задержкой</div></div><br>
Задержку по фэншую (в венде) задают в виде пинга в n-повторений.]]></description>
        <author>JoeUser</author>
        <category>Пакетные файлы CMD, BAT</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3688644</guid>
        <pubDate>Fri, 14 Oct 2016 08:16:12 +0000</pubDate>
        <title>Трюки в CMD</title>
        <link>https://forum.sources.ru/index.php?showtopic=409721&amp;view=findpost&amp;p=3688644</link>
        <description><![CDATA[Jin X: Проверку поддержки расширенной обработки команд и включение этой расширенной обработки, а также отложенного расширения переменных среды я делаю следующим образом:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">if [%cmdextversion%] == [] goto nocmdext</div><div class="code_line">if not cmdextversion 1 goto nocmdext</div><div class="code_line">setlocal EnableExtensions EnableDelayedExpansion</div><div class="code_line">if errorlevel 1 goto nocmdext</div></ol></div></div></div></div>Не уверен, что это наиболее оптимальный вариант (вероятно, он избыточен), предложите свой :)<br>
<br>
<br>
Вывод сообщений с обрамлением чёрточками (символ # заменяется на &#33;):<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">@echo off</div><div class="code_line">setlocal EnableExtensions EnableDelayedExpansion</div><div class="code_line">&nbsp;</div><div class="code_line">echo.</div><div class="code_line">call :ShowMsg &quot;Hello, my friend#&quot;</div><div class="code_line">exit /b</div><div class="code_line">&nbsp;</div><div class="code_line">:ShowMsg str(#=!)</div><div class="code_line">set _s=%~1&amp;call :StrLen !_s!&amp;call :StrRep !_l! -</div><div class="code_line">echo %_s:#=^^!%</div><div class="code_line">call :StrRep %_l% -</div><div class="code_line">exit /b</div><div class="code_line">:StrLen str</div><div class="code_line">set _=%*&amp;set _l=0&amp;(for /l %%i in (1,1,256) do if #!_! neq # set /a _l+=1&amp;set _=!_:~0,-1!)&amp;exit /b</div><div class="code_line">:StrRep count str</div><div class="code_line">set _=&amp;(for /l %%i in (1,1,%1) do set _=!_!%2)&amp;echo !_!&amp;exit /b</div></ol></div></div></div></div>p.s. Кол-во чёрточек ограничено 256 символами (для упрощения).<br>
Есть и более сложные (быстрые и универсальные) процедуры вычисления длины строки.<br>
<br>
<br>
Вывод сообщений без перевода строки и задержка (демонстрация вентилятора):<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">@echo off</div><div class="code_line">setlocal EnableExtensions EnableDelayedExpansion</div><div class="code_line">&nbsp;</div><div class="code_line">for /l %%i in (1,1,10) do (</div><div class="code_line">&nbsp;&nbsp;call :Write &quot;|◘&quot;</div><div class="code_line">&nbsp;&nbsp;call :Delay 10</div><div class="code_line">&nbsp;&nbsp;call :Write /◘</div><div class="code_line">&nbsp;&nbsp;call :Delay 10</div><div class="code_line">&nbsp;&nbsp;call :Write -◘</div><div class="code_line">&nbsp;&nbsp;call :Delay 10</div><div class="code_line">&nbsp;&nbsp;call :Write \◘</div><div class="code_line">&nbsp;&nbsp;call :Delay 10</div><div class="code_line">)</div><div class="code_line">exit /b</div><div class="code_line">&nbsp;</div><div class="code_line">:Write str</div><div class="code_line">set /p=%1&#60;nul</div><div class="code_line">exit /b</div><div class="code_line">&nbsp;</div><div class="code_line">:Delay hundredth</div><div class="code_line">call :GetTicks _a</div><div class="code_line">:_WaitDelay</div><div class="code_line">call :GetTicks _b</div><div class="code_line">set /a _b=_b-_a</div><div class="code_line">if %_b% lss 0 set /a _b+=8640000</div><div class="code_line">if %_b% lss %~1 goto _WaitDelay</div><div class="code_line">exit /b</div><div class="code_line">&nbsp;</div><div class="code_line">:GetTicks var</div><div class="code_line">set _t=%time: =0%</div><div class="code_line">set /a %1=1%_t:~9,2%-100+(1%_t:~6,2%-100)*100+(1%_t:~3,2%-100)*6000+(1%_t:~0,2%-100)*360000</div><div class="code_line">exit /b</div></ol></div></div></div></div>Не потеряйте здесь символы с кодом 8 &#33;&#33;&#33; (◘)<br>
p.s. Суть вывода сообщений без перевода строки сводится к одной простой команде:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">set /p=Строка&#60;nul</div></ol></div></div></div></div>или так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;nul set /p=Строка</div></ol></div></div></div></div><br>
<br>
Ещё один пример с задержкой (определение прошедшего времени):<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">@echo off</div><div class="code_line">setlocal EnableExtensions EnableDelayedExpansion</div><div class="code_line">&nbsp;</div><div class="code_line">echo.</div><div class="code_line">echo Подождите, команда выполняется...</div><div class="code_line">call :GetTicks tick1</div><div class="code_line">&nbsp;</div><div class="code_line">:: Выполняем команду</div><div class="code_line">dir c:\ /s &#62; nul</div><div class="code_line">&nbsp;</div><div class="code_line">call :GetTicks tick2</div><div class="code_line">set /a hs=%tick2%-%tick1%</div><div class="code_line">if %hs% lss 0 set /a hs+=8640000</div><div class="code_line">set /a h=%hs%/360000</div><div class="code_line">set /a m=(%hs%/6000)%%60</div><div class="code_line">set /a s=(%hs%/100)%%60</div><div class="code_line">set /a hs=%hs%%%100</div><div class="code_line">echo Прошедшее время: %h% час %m% мин %s%.%hs% сек.</div><div class="code_line">pause</div><div class="code_line">exit /b</div><div class="code_line">&nbsp;</div><div class="code_line">:GetTicks var</div><div class="code_line">set _t=%time: =0%</div><div class="code_line">set /a %1=1%_t:~9,2%-100+(1%_t:~6,2%-100)*100+(1%_t:~3,2%-100)*6000+(1%_t:~0,2%-100)*360000</div><div class="code_line">exit /b</div></ol></div></div></div></div><br>
<br>
Чтение ini-файлов:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">@ECHO OFF</div><div class="code_line">:: Check Windows version</div><div class="code_line">IF NOT &quot;%OS%&quot;==&quot;Windows_NT&quot; GOTO Syntax</div><div class="code_line">:: Check command line</div><div class="code_line">ECHO.%1 | FIND &quot;?&quot; &#62;NUL</div><div class="code_line">IF NOT ERRORLEVEL 1 GOTO Syntax</div><div class="code_line">IF [%3]==[] GOTO Syntax</div><div class="code_line">:: Check if INI file exists</div><div class="code_line">IF NOT EXIST &quot;%~f1&quot; GOTO Syntax</div><div class="code_line">&nbsp;</div><div class="code_line">:: Keep variables local and enable delayed variable expansion</div><div class="code_line">SETLOCAL ENABLEDELAYEDEXPANSION</div><div class="code_line">&nbsp;</div><div class="code_line">:: Read variables from command line</div><div class="code_line">SET INIFile=&quot;%~f1&quot;</div><div class="code_line">SET INISection=%~2</div><div class="code_line">SET INIKey=%~3</div><div class="code_line">SET INIValue=</div><div class="code_line">&nbsp;</div><div class="code_line">:: Reset temporary variables</div><div class="code_line">SET SectOK=0</div><div class="code_line">SET SectFound=0</div><div class="code_line">SET KeyFound=0</div><div class="code_line">&nbsp;</div><div class="code_line">:: Search the INI file line by line</div><div class="code_line">FOR /F &quot;tokens=* delims=&quot; %%A IN (&#39;TYPE %INIFile%&#39;) DO CALL :ParseINI &quot;%%A&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">:: Display the result</div><div class="code_line">ECHO.</div><div class="code_line">:: EXIT /B return codes (errorlevels) added by Van Woods,</div><div class="code_line">:: US Army Corps of Engineers, Seattle District</div><div class="code_line">IF NOT %SectFound%==1 (</div><div class="code_line">&nbsp;&nbsp; &nbsp;ECHO INI section not found</div><div class="code_line">&nbsp;&nbsp; &nbsp;EXIT /B 1</div><div class="code_line">) ELSE (</div><div class="code_line">&nbsp;&nbsp; &nbsp;IF NOT %KeyFound%==1 (</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ECHO INI key not found</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;EXIT /B 2</div><div class="code_line">&nbsp;&nbsp; &nbsp;) ELSE (</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;IF DEFINED INIValue (</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ECHO.%INIFile%</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ECHO [%INISection%]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ECHO %INIKey%=%INIValue%</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;) ELSE (</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ECHO Value not defined</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EXIT /B 3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;)</div><div class="code_line">)</div><div class="code_line">&nbsp;</div><div class="code_line">:: Corrected environment variable by Van Woods,</div><div class="code_line">:: US Army Corps of Engineers, Seattle District</div><div class="code_line">ENDLOCAL &amp; SET %INIKey%=%INIValue%</div><div class="code_line">GOTO:EOF</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">:ParseINI</div><div class="code_line">:: Skip rest of file after key has been found;</div><div class="code_line">:: speed improvement by Jeroen Verschuuren</div><div class="code_line">IF &quot;%SectFound%&quot;==&quot;1&quot; IF &quot;%KeyFound%&quot;==&quot;1&quot; GOTO:EOF</div><div class="code_line">:: Store quoted line in variable</div><div class="code_line">SET Line=&quot;%~1&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">:: Check if this line is the required section heading</div><div class="code_line">ECHO.%Line%| FIND /I &quot;[%INISection%]&quot; &#62;NUL</div><div class="code_line">IF NOT ERRORLEVEL 1 (</div><div class="code_line">&nbsp;&nbsp; &nbsp;SET SectOK=1</div><div class="code_line">&nbsp;&nbsp; &nbsp;SET SectFound=1</div><div class="code_line">&nbsp;&nbsp; &nbsp;GOTO:EOF</div><div class="code_line">)</div><div class="code_line">:: Check if this line is a different section header</div><div class="code_line">IF &quot;%Line:~1,1%&quot;==&quot;[&quot; SET SectOK=0</div><div class="code_line">IF %SectOK%==0 GOTO:EOF</div><div class="code_line">&nbsp;</div><div class="code_line">:: Parse any &quot;key=value&quot; line</div><div class="code_line">FOR /F &quot;tokens=1* delims==&quot; %%a IN (&#39;ECHO.%Line%&#39;) DO (</div><div class="code_line">&nbsp;&nbsp; &nbsp;SET Key=%%a^&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;SET Value=^&quot;%%b</div><div class="code_line">)</div><div class="code_line">&nbsp;</div><div class="code_line">:: Strip quotes, tabs, and surrounding spaces from key and value</div><div class="code_line">:: Modifications added by Van Woods,</div><div class="code_line">:: US Army Corps of Engineers, Seattle District</div><div class="code_line">SET Value=%Value:&quot;=%</div><div class="code_line">:: Remove quotes</div><div class="code_line">SET Key=%Key:&quot;=%</div><div class="code_line">:: Remove tabs</div><div class="code_line">SET Value=%Value: &nbsp; =%</div><div class="code_line">SET Key=%Key: &nbsp; =%</div><div class="code_line">:: Remove leading spaces</div><div class="code_line">FOR /F &quot;tokens=* delims= &quot; %%A IN (&quot;%Key%&quot;) &nbsp; DO SET Key=%%A</div><div class="code_line">FOR /F &quot;tokens=* delims= &quot; %%A IN (&quot;%Value%&quot;) DO SET Value=%%A</div><div class="code_line">:: Remove trailing spaces</div><div class="code_line">FOR /L %%A in (1,1,32) do if &quot;!Key:~-1!&quot;==&quot; &quot; set Key=!Key:~0,-1!</div><div class="code_line">FOR /L %%A in (1,1,32) do if &quot;!Value:~-1!&quot;==&quot; &quot; set Value=!Value:~0,-1!</div><div class="code_line">&nbsp;</div><div class="code_line">:: Now check if the key matches the required key</div><div class="code_line">IF /I &quot;%Key%&quot;==&quot;%INIKey%&quot; (</div><div class="code_line">&nbsp;&nbsp; &nbsp;SET INIValue=%Value%</div><div class="code_line">&nbsp;&nbsp; &nbsp;SET KeyFound=1</div><div class="code_line">)</div><div class="code_line">&nbsp;</div><div class="code_line">:: End of ParseINI subroutine</div><div class="code_line">GOTO:EOF</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">:Syntax</div><div class="code_line">ECHO.</div><div class="code_line">ECHO ReadINI.bat, &nbsp;Version 1.30 for Windows NT 4 / 2000 / XP / Server 2003</div><div class="code_line">ECHO Read a value from the specified INI file</div><div class="code_line">ECHO.</div><div class="code_line">ECHO Usage: &nbsp;READINI &nbsp;&quot;ini_file&quot; &nbsp;&quot;section&quot; &nbsp;&quot;key&quot;</div><div class="code_line">ECHO Where: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;ini_file&quot; is the file name of the INI file to be read</div><div class="code_line">ECHO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;section&quot; &nbsp;is the section name, without the brackets</div><div class="code_line">ECHO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;key&quot; &nbsp; &nbsp; &nbsp;is the key whose value must be read</div><div class="code_line">ECHO.</div><div class="code_line">ECHO Example: if MYPROG.INI looks like this:</div><div class="code_line">ECHO &nbsp; &nbsp; [Section 1]</div><div class="code_line">ECHO &nbsp; &nbsp; Key1=Value 1</div><div class="code_line">ECHO &nbsp; &nbsp; Key2=Value 2</div><div class="code_line">ECHO &nbsp; &nbsp; [Section 2]</div><div class="code_line">ECHO &nbsp; &nbsp; Key2=Value 4</div><div class="code_line">ECHO Then the command: &nbsp;READINI &quot;MYPROG.INI&quot; &quot;section 1&quot; &quot;key2&quot;</div><div class="code_line">ECHO will return: &nbsp; &nbsp; &nbsp; Key2=Value 2</div><div class="code_line">ECHO.</div><div class="code_line">ECHO Written by Rob van der Woude</div><div class="code_line">ECHO http://www.robvanderwoude.com</div><div class="code_line">ECHO Speed improvement by Jeroen Verschuuren</div><div class="code_line">ECHO Return codes, whitespace removal and corrected environment variable</div><div class="code_line">ECHO by Van Woods, US Army Corps of Engineers, Seattle District</div></ol></div></div></div></div><br>
<br>
Добавляйте и вы что-нибудь интересное&#33; ;)]]></description>
        <author>Jin X</author>
        <category>Пакетные файлы CMD, BAT</category>
      </item>
	
      </channel>
      </rss>
	