<?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=8805</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8805&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: Вывод разноцветного текста».]]></description>
		<lastBuildDate>Thu, 04 Sep 2025 08:48:24 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: Вывод разноцветного текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=162676#p162676</link>
			<description><![CDATA[<p>Более продвинутый способ вывода разноцветного текста (и не только) см. тут - <a href="http://forum.script-coding.com/viewtopic.php?id=18490">CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)</a></p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Thu, 04 Sep 2025 08:48:24 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=162676#p162676</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Вывод разноцветного текста]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=76375#p76375</link>
			<description><![CDATA[<p>Автор представленного решения (<a href="http://forum.script-coding.com/viewtopic.php?id=7944">обсуждение</a>) — <strong>Arigato</strong>.</p><p>Утилита FINDSTR при помощи ключа /A позволяет задать цвета текста и фона для выводимых имён файлов, в которых обнаружено соответсвие строке поиска (после имени файла теми же цветами выводится двоеточие, а затем, уже общими цветами окна консоли, строка, содержащая соответствие). Причём, если строка, содержащая соответствие, в файле последняя и не завершается переводом строки, то перевод строки после неё будет отсутствовать и в выводе FINDSTR.</p><p>Это используется в двух сдедующих процедурах, предназначенных для вывода текста заданного цвета:<br /></p><div class="codebox"><pre><code>:write
:: Вывести цветную надпись без перевода строки
:: %1 - цвет
:: %2 - текст надписи
:: %3 - флаг, любое значение, если нужно двоеточие в конце строки</code></pre></div><div class="codebox"><pre><code>:writeLn
:: Вывести цветную надпись с переводом строки
:: %1 - цвет
:: %2 - текст надписи
:: %3 - флаг, любое значение, если нужно двоеточие в конце строки</code></pre></div><p>Пример использования:<br /></p><div class="codebox"><pre><code>call :writeLn 2C &quot;   Hello, World   &quot;</code></pre></div><p>— выведет «Hello, World» красным цветом на зеленом фоне.</p><p>Особенности:<br />1. Цвет задается аналогично команде COLOR, т.е. цвет фона и текста двумя шестнадцатеричными цифрами.<br />2. Учитывая то, что цветным выводится имя файла, далеко не любой текст можно вывести этим методом. Текст должен быть допустимым с точки зрения составления имени файла.<br />3. В каталоге %TEMP% создается и затем удаляется временный подкаталог (если при создании подкаталога происходит ошибка, попытка повторяется для другого имени…).<br />4. В конце строки можно вывести двоеточие, хотя оно не может присутствовать в имени файла. Для этого надо установить любое значение в качестве третьего аргумента процедуры.<br />5. Пробелы в конце строки съедаются, в начале строки сохраняются.<br />6. В строках длинной 78 и 79 символов, т.е. если строка подходит к концу экрана, при выводе в конце могут добавиться двоеточие и точка (используемая здесь в качестве строки поиска FINDSTR). <em>(<span class="bbu">wisgest</span>: Точнее, в строках длиной n*w-1 и n*w-2, где n — целое число, w — ширина буфера экрана в символах, которая может отличаться от 80.)</em></p><p>Пример с двоеточием:<br /></p><div class="codebox"><pre><code>call :write 0F &quot;Random&quot; 1
call :writeLn 0E &quot; %random%&quot;</code></pre></div><p>В таком примере в конце строки будет выведено двоеточие зеленого цвета и точка обычного цвета <em>(<span class="bbu">wisgest</span>: если ширина буфера экрана составляет 80 символов)</em>:<br /></p><div class="codebox"><pre><code>call :writeLn 0A &quot;123456789012345678901234567890123456789012345678901234567890123456789012345678&quot;</code></pre></div><p>Сами процедуры с использующим их примером:<br /></p><div class="codebox"><pre><code>@ echo off
setlocal enabledelayedexpansion

call :write 0F &quot;Random&quot; 1
call :writeLn 0E &quot; %random%&quot;

echo:

set hex=0123456789ABCDEF
for /l %%j in (1, 1, 6) do (
  for /l %%i in (15, -1, 1) do (
    call :write !hex:~%%i,1!!hex:~%%j,1! &quot;[---]&quot;
  )
  echo:
)

echo:

call :writeLn 2C &quot;   Hello, World   &quot;

echo:

call :writeLn 0A &quot;123456789012345678901234567890123456789012345678901234567890123456789012345678&quot;

echo:

pause
color 0B
pause

endlocal
exit /b 0


:write
:: Вывести цветную надпись без перевода строки
:: %1 - цвет
:: %2 - текст надписи
:: %3 - флаг, любое значение, если нужно двоеточие в конце строки
  setlocal
  :write1
  set &quot;tempFolder=%TEMP%\%~n0.%time:~-2%.%random%&quot;
  md &quot;%tempFolder%&quot; 2&gt;nul || goto write1
  pushd %tempFolder%
  set /p .=.&lt;nul&gt;&quot;%~2&quot;
  findstr /a:%~1 /c:&quot;.&quot; /s &quot;%~2&quot;
  if &quot;%~3&quot;==&quot;&quot; (set /p .=  &lt;nul) else set /p .= &lt;nul
  popd
  rd /s /q &quot;%tempFolder%&quot; 2&gt;nul
endlocal &amp; exit /b

:writeLn
:: Вывести цветную надпись с переводом строки
:: %1 - цвет
:: %2 - текст надписи
:: %3 - флаг, любое значение, если нужно двоеточие в конце строки
  call :write %1 &quot;%~2&quot; %3
  echo:
exit /b
</code></pre></div><p>(т.к. имеются управляющие символы Backspace, используемые для удаления завершающего двоеточия с точкой, можете воспользоваться присоединённым файлом).</p>]]></description>
			<author><![CDATA[null@example.com (wisgest)]]></author>
			<pubDate>Wed, 23 Oct 2013 19:01:00 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=76375#p76375</guid>
		</item>
	</channel>
</rss>
