<?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=8777&amp;type=atom" />
	<updated>2014-01-08T22:28:00Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=8777</id>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=79031#p79031" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Yury]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30230</uri>
			</author>
			<updated>2014-01-08T22:28:00Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=79031#p79031</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78980#p78980" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-07T10:52:53Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78980#p78980</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78973#p78973" />
			<content type="html"><![CDATA[<p>Буржуи тоже интересуются вопросом и решают: <a href="http://stackoverflow.com/questions/9592732/restore-the-previous-echo-status">http://stackoverflow.com/questions/9592 … cho-status</a></p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2014-01-07T04:18:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78973#p78973</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78972#p78972" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-07T03:47:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78972#p78972</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78968#p78968" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Yury]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30230</uri>
			</author>
			<updated>2014-01-07T00:42:37Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78968#p78968</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78963#p78963" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-06T23:22:28Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78963#p78963</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78958#p78958" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Yury]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=30230</uri>
			</author>
			<updated>2014-01-06T22:10:40Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78958#p78958</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78956#p78956" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-06T21:46:36Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78956#p78956</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=78930#p78930" />
			<content type="html"><![CDATA[<p>Задачка, по большому счёту, лишь для развлечения. Ну или для прояснения для себя каких-то особенностей работы командных файлов.<br />Но можно предположить случай, когда командный файл пишется с учётом возможности его использования из других командных файлов и по завершении работы должен вернуть среду в исходное состояние.<br />Однозначно же утверждать, что вывод команд на экран должен быть отключен нельзя: его можно оставить включенным для отображения критических команд, отключая отображение остальных с помощью «@».</p>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2014-01-06T05:59:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=78930#p78930</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[CMD/BAT: Определить текущий режим вывода команд]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=76089#p76089" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[wisgest]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=3850</uri>
			</author>
			<updated>2013-10-17T11:07:26Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=76089#p76089</id>
		</entry>
</feed>
