<?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: Определить текущий режим вывода команд]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=8777</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8777&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: Определить текущий режим вывода команд».]]></description>
		<lastBuildDate>Wed, 08 Jan 2014 22:28:00 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=79031#p79031</link>
			<description><![CDATA[<p>Как дополнение к своему решению обнаружил тот факт, что если к &quot;<strong>echo.</strong>&quot; добавить &quot;<strong>&gt;nul</strong>&quot;, то также можно сравнивать размер файла с нулём:</p><div class="codebox"><pre><code>(
for /l %%i in (1,1,1) do (
  echo.&gt;nul
))&gt;.txt
for %%i in (.txt) do (
  if %%~zi==0 (
   set echo_is=off
) else (
   set echo_is=on
))
set echo_is
pause&gt;nul</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Yury)]]></author>
			<pubDate>Wed, 08 Jan 2014 22:28:00 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=79031#p79031</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=78980#p78980</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Буржуи тоже интересуются вопросом и решают</p></blockquote></div><p>Следует признать, что <a href="http://stackoverflow.com/a/9594675">решение</a> практически идентичное:<br /></p><div class="codebox"><pre><code>:getEchoState echoStateVar
@(
  for %%A in (dummy) do rem
) &gt;&quot;%temp%\getEchoState.tmp&quot;
@for %%A in (&quot;%temp%\getEchoState.tmp&quot;) do @(
  if %%~zA equ 0 (set %~1=OFF) else set %~1=ON
  del &quot;%temp%\getEchoState.tmp&quot;
  exit /b
)</code></pre></div><p>--------------------</p><p>OFF: Мысль использовать перенаправление вывода FOR...REM мне пришла ранее при решении другой <a href="http://forum.script-coding.com/viewtopic.php?pid=65934#p65934">задачи</a>:<br /></p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>получить в общем случае параметры командного файла (в переменную среды, для возможности использования с отложенной подстановкой) без потерь и инъекций кода.</p></blockquote></div><p>В общих чертах (без подбора допустимого имени временного файла и блокирования от посторонних процессов до его прочтения) решение выглядело так:<br /></p><div class="codebox"><pre><code>prompt .
echo on
@(for %%i in (.) do rem %*
)&gt;args.tmp
@echo off
(set /p=&amp; set /p args=)&lt;args.tmp
set args=!args:~5,-1!
</code></pre></div><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Пожалуй, для этого вопроса лучше создать отдельную тему в разделе отведённом командным файлам.</p></blockquote></div><p>Тему так и не создал, т.к. в решении разочаровался (хотя, да, с инъекцией кода вопрос решился) по следующим причинам:<br />1) <span class="bbu">CMD /U</span> — файл создаётся в юникоде, но SET /P всё-равно читает его как в однобайтной кодировке;<br />2) <span class="bbu">CMD /A</span> (как обычно) — в действительности, командная строка может содержать символы в юникоде. Хотя при использовании шрифта Terminal при выводе на экран они заменяются похожими (напр., многоточие на двоеточие), но при внутренней обработке (присваивании параметров командного файла переменным среды, передаче в качестве параметров другим приложениям) они сохраняются. Но при перенаправлении вывода в файл они искажаются;<br />3) ну и, наконец, <span class="bbu">CMD /Q</span>.<br />(Кстати, отсутствие полноценного решения этой задачи я считаю основным и существенным недостатком командных файлов.)</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Tue, 07 Jan 2014 10:52:53 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=78980#p78980</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=78973#p78973</link>
			<description><![CDATA[<p>Буржуи тоже интересуются вопросом и решают: <a href="http://stackoverflow.com/questions/9592732/restore-the-previous-echo-status">http://stackoverflow.com/questions/9592 … cho-status</a></p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 07 Jan 2014 04:18:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=78973#p78973</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=78972#p78972</link>
			<description><![CDATA[<p>O.K.<br />Моё решение было такое же, только REM вместо ECHO с точкой<br />и в итоге сравнение размера файла с нулём.<br /></p><div class="codebox"><pre><code>@(for %%i in (.) do rem
)&gt;x.txt
@for %%f in (x.txt) do @if %%~zf equ 0 (set mode=OFF) else set mode=ON
</code></pre></div><p>(Последняя строка — пароль к архиву <em>(<span class="bbu">10.02.2014</span>: удалён за ненадобностью)</em>)</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Tue, 07 Jan 2014 03:47:20 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=78972#p78972</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=78968#p78968</link>
			<description><![CDATA[<p><strong>wisgest</strong>, в том же духе:<br /></p><div class="codebox"><pre><code>(
for /l %%i in (1,1,1) do (
  echo.
))&gt;.txt

for %%i in (.txt) do (
  if %%~zi leq 4 (
   set echo_is=off
) else (
   set echo_is=on
))
set echo_is
pause&gt;nul</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Yury)]]></author>
			<pubDate>Tue, 07 Jan 2014 00:42:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=78968#p78968</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=78963#p78963</link>
			<description><![CDATA[<p><strong>Yury</strong>, мысль правильная.<br />А как насчёт этого:<br /></p><div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Желательно, чтобы решение не зависило &lt;...&gt; от того, в&nbsp; режиме вывода результатов выполнения команд в каком формате (ANSI — с ключом /A, по умолчанию, или UNICODE — с ключом /U) был запущен обработчик командной строки.</p></blockquote></div><br /><div class="codebox"><pre><code>cmd /u /c &quot;echo off &amp; test.bat&quot;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Mon, 06 Jan 2014 23:22:28 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=78963#p78963</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=78958#p78958</link>
			<description><![CDATA[<p>Как-то так:<br /></p><div class="codebox"><pre><code>(
for /l %%i in (1,1,1) do (
  echo.
))&gt;.txt

for %%i in (.txt) do (
  if %%~zi==2 (
   set echo_is=off
) else (
   set echo_is=on
))
set echo_is
pause&gt;nul</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Yury)]]></author>
			<pubDate>Mon, 06 Jan 2014 22:10:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=78958#p78958</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=78956#p78956</link>
			<description><![CDATA[<div class="quotebox"><cite>wisgest пишет:</cite><blockquote><p>Ну или для прояснения для себя каких-то особенностей работы командных файлов.</p></blockquote></div><p>Первым делом неискушённый разработчик может с помощью FOR/F попробовать читать вывод команды ECHO без параметров. Но для исполнения команд таким способом создаётся новый процесс CMD.EXE, на который не распространяются установки родительского процесса:<br /></p><div class="codebox"><pre><code>@echo off
echo
for /f &quot;delims=&quot; %%s in (&#039;echo&#039;) do set EchoMode=%%s
echo %EchoMode%
</code></pre></div><p>выдаст (в русской версии)<br /></p><div class="quotebox"><blockquote><p>Режим вывода команд на экран (ECHO) отключен.<br />Режим вывода команд на экран (ECHO) включен.</p></blockquote></div>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Mon, 06 Jan 2014 21:46:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=78956#p78956</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=78930#p78930</link>
			<description><![CDATA[<p>Задачка, по большому счёту, лишь для развлечения. Ну или для прояснения для себя каких-то особенностей работы командных файлов.<br />Но можно предположить случай, когда командный файл пишется с учётом возможности его использования из других командных файлов и по завершении работы должен вернуть среду в исходное состояние.<br />Однозначно же утверждать, что вывод команд на экран должен быть отключен нельзя: его можно оставить включенным для отображения критических команд, отключая отображение остальных с помощью «@».</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Mon, 06 Jan 2014 05:59:29 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=78930#p78930</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76089#p76089</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?pid=65800#p65800">Ещё одна</a> задача по командным файлам: определить (получить в переменную), в каком состоянии (ON или OFF) находится режим вывода команд (ECHO). Желательно, чтобы решение не зависило ни от языка системы, ни от того, в&nbsp; режиме вывода результатов выполнения команд в каком формате (ANSI — с ключом /A, по умолчанию, или UNICODE — с ключом /U) был запущен обработчик командной строки. Если не сможете найти решение, то поделитесь возникшими соображениями.<br />Моё решение — в прикреплённом зашифрованном архиве <em>(<span class="bbu">10.02.2014</span>: удалён за ненадобностью)</em>.</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Thu, 17 Oct 2013 11:07:26 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76089#p76089</guid>
		</item>
	</channel>
</rss>
