<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=9110&amp;type=atom" />
	<updated>2015-12-28T21:49:31Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=9110</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=100009#p100009" />
			<content type="html"><![CDATA[<p><strong>Yury</strong><br />Экранирование чего? Совокупность символов может быть любая. И что значит &quot;портит&quot;?</p>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2015-12-28T21:49:31Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=100009#p100009</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=100003#p100003" />
			<content type="html"><![CDATA[<p><strong>Flasher</strong>, в Вашем примере экранирование излишне, более того, оно &quot;портит&quot; вывод.</p><p><strong>Rumata</strong>, да, к сожалению, и <a href="http://www.cyberforum.ru/cmd-bat/thread672170-page4.html#post8056406">мне пока способ отображения символов &quot;?&quot; и &quot;*&quot; и содержащих их строк для этого случая неизвестен</a>.</p>]]></content>
			<author>
				<name><![CDATA[Yury]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30230</uri>
			</author>
			<updated>2015-12-28T17:25:13Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=100003#p100003</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=99993#p99993" />
			<content type="html"><![CDATA[<p>Именно в цикле? &gt;</p><div class="codebox"><pre><code>for /f &quot;delims=&quot; %# in (&quot;^? /? -^?&quot;) do @(echo:%#)</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Flasher]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27593</uri>
			</author>
			<updated>2015-12-28T07:26:02Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=99993#p99993</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=99992#p99992" />
			<content type="html"><![CDATA[<p>По-видимому, нет возможности <span class="bbu">простым способом</span> заэкранировать шаблон &quot;?&quot; и рассматривать его как простой символ. <br /></p><div class="codebox"><pre><code>
for %f in ( &quot;&quot; &quot;?&quot; &quot;/?&quot; &quot;-?&quot; ) do @( echo:%f )
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2015-12-28T06:24:27Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=99992#p99992</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=91327#p91327" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>То есть <strong>call set</strong> заведомо медленнее (из-за дисковых операций). &lt;…&gt; Также это может привести к побочному эффекту если такой файл на диске существует! Проверено, это так и есть...</p></blockquote></div><p>Подтверждаю и обещаю так не делать.<br />Впрочем, просматривается кое-какое достаточно очевидное решение,<br />не свободное от ипользования дисковых операций (в силу построчной обработки командных файлов),<br />но свободное от побочных эффектов:</p><p>добавить к командному файлу подпрограмму<br /></p><div class="codebox"><pre><code>:~
@%*
@exit /b
</code></pre></div><p>и вместо CALL КОМАНДА<br />писать CALL:~ КОМАНДА<br />, в том числе, если требуется неоднократное раскрытие переменных, вместо нескольких CALL подряд перед командой использовать столько же CALL:~</p><p>— Поведение, за исключением возможных побочных эффектов, кажется идентичным,<br />но не совсем:<br />а) появляется некоторая возможность использовать IF и FOR после CALL;<br />б) изменяется поведение GOTO (при последующей встрече с EXIT /B)<br />и EXIT /B (устанавливается <em>%ERRORLEVEL%</em>, но не происходит выход).</p><p>Хотя в последнем нет особой необходимости, но если вдруг понадобится использовать GOTO и EXIT /B с отложенным раскрытием их аргументов и без помощи вспомогательной переменной, то можно для этих команд написать отдельные подпрограммы, использующие <a href="http://forum.script-coding.com/viewtopic.php?pid=78425#p78425">переход на несуществующую метку</a><br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>:goto
@(goto)2&gt;nul &amp; goto %*
:exit/b
@(goto)2&gt;nul &amp; exit /b %*
</code></pre></div><p>и вместо<br /></p><div class="codebox"><pre><code>call goto выражение_для_вычисления_метки
call exit /b выражение_для_вычисления_кода_возврата</code></pre></div><p>писать<br /></p><div class="codebox"><pre><code>call :goto выражение_для_вычисления_метки
call :exit/b выражение_для_вычисления_кода_возврата</code></pre></div></div></div><p>P.S. Можно заметить, что этим способом можно было сразу определить подпрограмму «<em>~</em>»:<br /></p><div class="codebox"><pre><code>:~
@(goto)2&gt;nul &amp; %*
</code></pre></div><p>но такой подход мне кажется мне кажется менее ясным и более ресурсозатратным,<br />а возможность при первом подходе использовать </p><div class="codebox"><pre><code>call:~ exit /b число</code></pre></div><p> для установки кода ошибки без возврата из подпрограммы — более полезной.</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2015-02-07T07:28:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=91327#p91327</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=89654#p89654" />
			<content type="html"><![CDATA[<p><a href="http://ss64.com/nt/call.html">http://ss64.com/nt/call.html</a></p><p>Недокументированное поведение команды call. <br /><strong>call команда</strong> (без двоеточия в начале) первым делом ВСЕГДА ищет исполнимый файл на диске, а потом запускает внутреннюю команду. То есть <strong>call set</strong> заведомо медленнее (из-за дисковых операций). То есть в циклических действиях следует избегать использования таких конструкций. Также это может привести к побочному эффекту если такой файл на диске существует! Проверено, это так и есть...</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2014-12-21T11:25:02Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=89654#p89654</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88189#p88189" />
			<content type="html"><![CDATA[<p><strong>Yury</strong>, странно, что Вам пока не дали статус разработчика.</p>]]></content>
			<author>
				<name><![CDATA[greg zakharov]]></name>
			</author>
			<updated>2014-11-10T12:12:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88189#p88189</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88182#p88182" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Например, cd. трудна для восприятия, нужно задуматься, что тут происходит на самом деле.</p></blockquote></div><br /><br /><br /><div class="codebox"><pre><code>cd.</code></pre></div><p>-- это тоже самое, что </p><div class="codebox"><pre><code>cd .</code></pre></div><p>.<br />Команда изменяет текущий каталог на... текущий каталог.</p><br /><br /><div class="codebox"><pre><code>cd..</code></pre></div><p>-- это тоже самое, что и </p><div class="codebox"><pre><code>cd ..</code></pre></div><p>.<br />Команда изменяет текущий каталог на родительский каталог.</p><br /><br /><br /><br /><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>В плане лаконичности call лучший кандидат.</p></blockquote></div><br /><br /><br /><div class="codebox"><pre><code>rem+&gt;1.txt
rem[&gt;2.txt
rem]&gt;3.txt
rem\&gt;4.txt
rem/&gt;5.txt
rem.&gt;6.txt
rem,&gt;7.txt
rem:&gt;8.txt
rem;&gt;9.txt</code></pre></div><p>Всё те же символы, что и для &quot;<em>echo</em>&quot;, за исключением &quot;<strong>(</strong>&quot; и &quot;<strong>=</strong>&quot;.</p><br /><p>Команда </p><div class="codebox"><pre><code>rem=&gt;example.txt</code></pre></div><p> равносильна команде </p><div class="codebox"><pre><code>rem &gt;example.txt</code></pre></div><p>,<br />то есть является обычным помещением комментария.</p><br /><p>Удивительно, но знак равенства всё же работает, но только в такой конструкции: </p><div class="codebox"><pre><code>for %%i in (&quot;=&quot;) do rem%%~i&gt;10.txt</code></pre></div><p>.</p><br /><p>Команда </p><div class="codebox"><pre><code>rem(&gt;example.txt</code></pre></div><p> тоже создаст пустой файл, но с выводом ошибки: </p><div class="quotebox"><blockquote><p>&quot;rem(&quot; не является внутренней или внешней<br />командой, исполняемой программой или пакетным файлом.</p></blockquote></div><p>.<br />То есть с таким же успехом пустой файл можно создать с помощью команды </p><div class="codebox"><pre><code>Абракадабра 2&gt;nul&gt;example.txt</code></pre></div><p>.</p><br /><p>Кстати, применив команду &quot;<em>rem:</em>&quot; можно одновременно написать нужный комментарий и создать пустой файл. Например, в коде </p><div class="codebox"><pre><code>rem: Мама мыла &gt; раму.</code></pre></div><p> &quot;<em> Мама мыла </em>&quot; -- это комментарий, а &quot;<em>&gt; раму.</em>&quot; -- это создание пустого файла &quot;<em>раму</em>&quot;.</p>]]></content>
			<author>
				<name><![CDATA[Yury]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30230</uri>
			</author>
			<updated>2014-11-10T02:35:18Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88182#p88182</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88179#p88179" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>greg zakharov пишет:</cite><blockquote><p>alexii, тогда как назваться, если WinXP\7 триальные, живут под VirtualBox в Debian?</p></blockquote></div><p>«Удачливым сукиным сыном» <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />. Ибо пробная версия XP — достаточно большая редкость. У меня нет.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2014-11-09T17:17:01Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88179#p88179</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88174#p88174" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>greg zakharov пишет:</cite><blockquote><div class="quotebox"><cite>Yury пишет:</cite><blockquote><p>Если файл &quot;example.txt&quot; не существует, то он создаётся, если же этот файл существует, то он &quot;опустошается&quot; во избежание дозаписи.</p></blockquote></div><p>Простите, но это что-то из области &quot;CMD\BAT: камасутра&quot;.</p></blockquote></div><br /><p><strong>greg zakharov</strong>, излагайти свои мысли так, чтобы они были понятны другим.</p>]]></content>
			<author>
				<name><![CDATA[Yury]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30230</uri>
			</author>
			<updated>2014-11-09T12:52:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88174#p88174</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88159#p88159" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Yury пишет:</cite><blockquote><p>Если файл &quot;example.txt&quot; не существует, то он создаётся, если же этот файл существует, то он &quot;опустошается&quot; во избежание дозаписи.</p></blockquote></div><p>Простите, но это что-то из области &quot;CMD\BAT: камасутра&quot;.</p>]]></content>
			<author>
				<name><![CDATA[greg zakharov]]></name>
			</author>
			<updated>2014-11-09T10:58:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88159#p88159</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88149#p88149" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>greg zakharov пишет:</cite><blockquote><p>Пардон, а где сие<br /></p><div class="quotebox"><cite>Yury пишет:</cite><blockquote><p>setlocal enableextensions enabledelayedexpansion&gt;&quot;example.txt&quot;</p></blockquote></div><p>применимо? А то мысли всякие нехорошие напрашиваются...</p></blockquote></div><br /><br /><br /><div class="codebox"><pre><code>@setlocal enableextensions enabledelayedexpansion&gt;&quot;example.txt&quot;

@for %%i in (Мама мыла раму.) do @(
 set x=%%i
 set x=!x:Мама=Папа!
 echo !x:мыла=мыл!&gt;&gt;&quot;example.txt&quot;
 )

@exit /b</code></pre></div><br /><p>Если файл &quot;<em>example.txt</em>&quot; не существует, то он создаётся, если же этот файл существует, то он &quot;опустошается&quot; во избежание дозаписи.</p><br /><br /><p>Правда, в этом случае такая необходимость отпадает:</p><br /><div class="codebox"><pre><code>@setlocal enableextensions enabledelayedexpansion

@&gt;&quot;example.txt&quot; (
for %%i in (Мама мыла раму.) do @(
 set x=%%i
 set x=!x:Мама=Папа!
 echo !x:мыла=мыл!
 )
)

@exit /b</code></pre></div><br /><p>.</p>]]></content>
			<author>
				<name><![CDATA[Yury]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30230</uri>
			</author>
			<updated>2014-11-09T08:57:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88149#p88149</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88144#p88144" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Например, cd. трудна для восприятия...</p></blockquote></div><p>Ой ли?</p>]]></content>
			<author>
				<name><![CDATA[greg zakharov]]></name>
			</author>
			<updated>2014-11-09T08:20:04Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88144#p88144</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88143#p88143" />
			<content type="html"><![CDATA[<p>Пардон, а где сие<br /></p><div class="quotebox"><cite>Yury пишет:</cite><blockquote><p>setlocal enableextensions enabledelayedexpansion&gt;&quot;example.txt&quot;</p></blockquote></div><p>применимо? А то мысли всякие нехорошие напрашиваются...</p>]]></content>
			<author>
				<name><![CDATA[greg zakharov]]></name>
			</author>
			<updated>2014-11-09T08:19:00Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88143#p88143</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Хитрости и нелепости интерпретатора]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=88141#p88141" />
			<content type="html"><![CDATA[<p>Я бы еще добавил ясность изложения. <br />Лучше написать так<br /></p><div class="codebox"><pre><code>
type nul &gt;filename
copy nul filename &gt;nul
</code></pre></div><p>можно и так<br /></p><div class="codebox"><pre><code>
call&gt;filename
break&gt;filename
</code></pre></div><p>Так как эти команды короче, осмысленнее или отсутствует &quot;сайд-эффекта&quot;. Например, <strong>cd.</strong> трудна для восприятия, нужно задуматься, что тут происходит на самом деле. (хотя <strong>break</strong> в этом контексте тоже не ахти какая осмысленная команда). <strong>setlocal/endlocal</strong> лучше оставить для своих прямых обязанностей. В контексте создания пустового файла они выполняют некие дополнительные действия (&quot;сайд-эффект&quot;), а удобство весьма сомнитеьно. В плане лаконичности <strong>call</strong> лучший кандидат. Это всего лишь мое мнение.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2014-11-09T08:17:36Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=88141#p88141</id>
		</entry>
</feed>
