<?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: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=18490</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=18490&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)».]]></description>
		<lastBuildDate>Fri, 05 Sep 2025 19:41:11 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=162682#p162682</link>
			<description><![CDATA[<div class="quotebox"><cite>Arigato пишет:</cite><blockquote><p>3. Пароль остается в истории ввода. То есть если при следующем запросе ввода нажать стрелку вверх, то на ввод поступи только что введенный пароль. Пока не ясно, как это побороть...</p></blockquote></div><p>Побороть эту проблему можно, если вынести ввод пароля в отдельный процесс. То есть нам нужен отдельный батник для ввода и проверки пароля, который лишь возвращается 1, если пароль верный и 0, если нет. Код <strong>auth.cmd</strong>:</p><div class="codebox"><pre><code>@echo off

:: Скрытый ввод пароля
set /p password=&quot;Ввыдите пароль: %CSI%?25l%CSI%30;40m&quot;
&lt;nul set /p =&quot;%CSI%1A%CSI%2K%CSI%0m%CSI%?25h&quot;

:: Проверка пароля
if &quot;%password%&quot;==&quot;123&quot; (
	set auth=1
) else (
	set auth=0
)

:: Затираем пароль на всякий случай
set &quot;password=                                                                                                             &quot;
set &quot;password=&quot;

:: Возвращаем флаг авторизации
exit %auth%
</code></pre></div><p>В основном батнике запускаем этот процесс с ожиданием его завершения и получаем код возврата:</p><div class="codebox"><pre><code>@echo off
setlocal enabledelayedexpansion

:: Получаем префикс CSI = ESC + [
for /f &quot;delims=&quot; %%a in (&#039;echo prompt $E[^| cmd /q /d /k&#039;) do set &quot;CSI=%%a&quot;

:: Ввод пароля
start /wait /b auth.cmd

:: Получение флага авторизации (0,1)
set auth=%errorlevel%

:: Проверка авторизации
if &quot;%auth%&quot;==&quot;1&quot; (
	echo %CSI%92mДоступ РАЗРЕШЕН%CSI%39m
) else (
	echo %CSI%91mДоступ ЗАПРЕЩЕН%CSI%39m
)
</code></pre></div><p>По итогу в истории ввода пароля нет.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Fri, 05 Sep 2025 19:41:11 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=162682#p162682</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=162681#p162681</link>
			<description><![CDATA[<p><strong>Скрытый ввод текста (ввод пароля)</strong></p><p>Используя CSI-коды можно реализовать скрытый ввод пароля. Следующий код позволяет это сделать:</p><div class="codebox"><pre><code>:: Скрытый ввод пароля
set /p password=&quot;Ввыдите пароль: %CSI%?25l%CSI%30;40m&quot;
&lt;nul set /p =&quot;%CSI%1A%CSI%2K%CSI%0m%CSI%?25h&quot;
</code></pre></div><p>Пояснение:<br />Код <strong>CSI30;40m</strong> устанавливает черный цвет текста на черном фоне, в итоге вводимые символы не видны.<br />Код <strong>CSI?25l</strong> отключает отображение курсора, в итоге не видно и количество вводимых символов.<br />После ввода выполняются следующие CSI-коды:<br />Код <strong>CSI1A</strong> подымает курсор на одну строку выше (то есть в строку, где только что вводили пароль).<br />Код <strong>CSI2K</strong> полностью удаляет строку. Это необходимо сделать, так как хоть пароль и не виден (черный на черном), но он остается на экране, от куда может быть скопирован в буфер обмена посредством выделения области экрана.<br />Код <strong>CSI0m</strong> отменяет черный текст на черном фоне.<br />Код <strong>CSI?25h</strong> включает отображение курсора.</p><p>Уязвимости:<br />1. Пароль выводится на экран черным цветом по черному фону, но фактически он там есть. Удаляется с экрана только после завершения ввода.<br />2. В переменной %password% сохраняется пароль в открытом виде. Желательно очистить переменную с помощью: <strong>set password=</strong><br />3. Пароль остается в истории ввода. То есть если при следующем запросе ввода нажать стрелку вверх, то на ввод поступи только что введенный пароль. Способ решения этой проблемы см. ниже...<br />4. Если проверка пароля происходит внутри bat-файла, то изучение исходного кода позволит раскрыть пароль.<br />5. Также изменение исходного кода позволит просто обойти проверку пароля.</p><p>Полноценный пример, демонстрирующий авторизацию по паролю:</p><div class="codebox"><pre><code>@echo off
setlocal enabledelayedexpansion

:: Получаем префикс CSI = ESC + [
for /f &quot;delims=&quot; %%a in (&#039;echo prompt $E[^| cmd /q /d /k&#039;) do set &quot;CSI=%%a&quot;

:: Скрытый ввод пароля
set /p password=&quot;Ввыдите пароль: %CSI%?25l%CSI%30;40m&quot;
&lt;nul set /p =&quot;%CSI%1A%CSI%2K%CSI%0m%CSI%?25h&quot;

:: Проверка пароля
if &quot;%password%&quot;==&quot;123&quot; (
	set auth=1
) else (
	set auth=
)

:: На всякий случай очищаем пароль
set password=

:: Проверка авторизации
if &quot;%auth%&quot;==&quot;1&quot; (
	echo %CSI%92mДоступ РАЗРЕШЕН%CSI%39m
) else (
	echo %CSI%91mДоступ ЗАПРЕЩЕН%CSI%39m
)
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Fri, 05 Sep 2025 10:27:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=162681#p162681</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=162679#p162679</link>
			<description><![CDATA[<p><strong>Вывод текста с CSI-кодами из файла</strong></p><p>Имеется возможность сохранить текст с управляющими последовательностями ANSI в файл для последующего вывода в консоль командой <strong>type</strong>.<br />Особенность: CSI-код в файле выглядит таким образом: ESC[, где ESC - непечатный символ с кодом 27 (0x1B). Набирается посредством Alt+27 или Alt+027, на экране выглядит как вопросик в квадрате или иначе, в зависимости от редактора.<br />Файл необходимо сохранять в однобайтовой кодировке OEM 866 для корректного отображения русских букв.</p><p>Простой пример для демонстрации:</p><div class="codebox"><pre><code>@echo off
echo Hello, World.
type example.ans
pause
</code></pre></div><p>Выводит на экран содержимое файла example.ans. Интересно отметить, что внутри файла example.ans добавлена очистка экрана. В итоге надпись &quot;Hello, World.&quot;, которая выведена раньше печати данного файла, будет стерта.</p><p>По сути ans-файл это обычный текстовый файл, но с добавлением управляющих последовательностей ANSI. Редактируется в любом блокноте, позволяющим вставлять непечатный символы. Использование расширение <strong>.ans</strong> лишь информирует о том, что там не плоский текст. А так расширение файла роли не играет.</p><p>Файл example.ans во вложении (извлечь из архива).</p><p>Скриншот примера:</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"><p><span class="postimg"><img src="https://i.ibb.co/KpkR5jJX/show.png" alt="https://i.ibb.co/KpkR5jJX/show.png" /></span></p></div></div>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Fri, 05 Sep 2025 09:27:58 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=162679#p162679</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=162678#p162678</link>
			<description><![CDATA[<p><strong>Применяем CSI-коды в приглашении командной строки</strong></p><p>CSI-коды отлично работают в промпте. Вот пример батника, который поменяет цвет приглашения на ярко-желтый:</p><div class="codebox"><pre><code>@echo off

:: Получаем префикс CSI = ESC + [
for /f &quot;delims=&quot; %%a in (&#039;echo prompt $E[^| cmd /q /d /k&#039;) do set &quot;CSI=%%a&quot;

:: Ярко-желтое приглашение командной строки
prompt %CSI%93m$P$G%CSI%0m
</code></pre></div><p>Скриншот примера во вложении.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Fri, 05 Sep 2025 09:09:13 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=162678#p162678</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=162677#p162677</link>
			<description><![CDATA[<p><strong>Управление курсором и очисткой</strong></p><p>Список поддерживаемых CSI-кодов:</p><p><strong>CSIH / CSIf</strong> - курсор в левый верхний угол<br /><strong>CSI#;#H</strong> - в строку;колонку (позиция курсора, левый верхний угол - 1;1)<br /><strong>CSI#;#f</strong> - то же самое (альтернативная форма)</p><p><strong>CSI#A</strong> - вверх # строк<br /><strong>CSI#B</strong> - вниз # строк<br /><strong>CSI#C</strong> - вправо # колонок<br /><strong>CSI#D</strong> - влево # колонок<br /><strong>CSI#E</strong> - на начало строки, ниже на #<br /><strong>CSI#F</strong> - на начало строки, выше на #<br /><strong>CSI#G</strong> - в колонку #<br /><strong>CSI#H</strong> - в начало строки #</p><p><strong>CSIs</strong> - сохранить позицию курсора<br /><strong>CSIu</strong> - восстановить позицию курсора</p><p><strong>CSI6n</strong> - выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец<br /><em>Ответ попадает в буфер ввода. Пока непонятно, как его считать...</em></p><p><strong>CSI?25l</strong> - скрыть курсор<br /><strong>CSI?25h</strong> - показать курсор</p><p><strong>CSI#T</strong> - прокрутить экран вверх на #<br /><em>Работает не совсем понятно...</em><br /><strong>CSI#S</strong> - прокрутить экран вниз на #</p><p><strong>CSIJ</strong> - очистка экрана (по умолчанию от курсора до конца, аналог CSI0J)<br /><strong>CSI1J</strong> - очистка экрана от начала экрана до курсора<br /><strong>CSI2J</strong> - очистка всего экрана<br /><em>Комбинация CSI2J+CSIH - аналог команды CLS</em></p><p><strong>CSIK</strong> - очистка строки (по умолчанию от курсора до конца, аналог CSI0K)<br /><strong>CSI1K</strong> - от начала строки до курсора<br /><strong>CSI2K</strong> - очистка всей строки</p><p><strong>CSI#L</strong> - вставить # пустых строк<br /><strong>CSI#M</strong> - удалить # строк<br /><strong>CSI#P</strong> - удалить (со смещением в строке) # символов в текущей строке<br /><strong>CSI#X</strong> - очистить (без смещения в строке) # символов в текущей строке<br /><strong>CSI#d</strong> - перемещает курсор вниз на # строк?</p><p>Демонстрационный пример:</p><div class="codebox"><pre><code>@echo off
setlocal enabledelayedexpansion
cls

:: Получаем префикс CSI = ESC + [
for /f &quot;delims=&quot; %%a in (&#039;echo prompt $E[^| cmd /q /d /k&#039;) do set &quot;CSI=%%a&quot;

:: CSIH / CSIf - курсор в левый верхний угол
echo Первая строка текста
echo %CSI%HВторая

pause
cls

:: CSI#;#H - в строку;колонку (позиция курсора, левый верхний угол - 1;1)
for /L %%i in (1,1,15) do (
	echo %CSI%%%i;%%iH%%i
)

:: CSI#;#f - то же самое (альтернативная форма)
for /L %%i in (15,-1,1) do (
	set /a y=30-%%i
	echo %CSI%%%i;!y!f%%i
)

pause
cls

:: CSI#A - вверх # строк
:: CSI#B - вниз # строк
:: CSI#C - вправо # колонок
:: CSI#D - влево # колонок
:: CSI#E - на начало строки, ниже на #
:: CSI#F - на начало строки, выше на #
:: CSI#G - в колонку #
:: CSI#H - в начало строки #
echo %CSI%20C[1]%CSI%10B[2]%CSI%10D[3]%CSI%5A[4]%CSI%10E[5]%CSI%5F[6]%CSI%5G[7]%CSI%3H[8]

pause
cls

:: CSIs - сохранить позицию курсора
:: CSIu - восстановить позицию курсора
echo %CSI%10;8HHello, %CSI%s
echo %CSI%HGoodby...
echo %CSI%uWorld.

pause
cls

:: CSI6n - выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец
:: Ответ попадает в буфер ввода. Пока непонятно, как его считать...
echo %CSI%15;15fOK%CSI%6n
set /p pos=Положение курсора: 
echo %pos:~2,-1%

pause
cls

:: CSI?25l - скрыть курсор
set /p name=%CSI%?25lВведите свое имя: 

:: CSI?25h - показать курсор
echo Привет, %name%%CSI%?25h
set /p age=Ваш возраст: 

pause
cls

dir %windir%
pause

:: CSI#T - прокрутить экран вверх на #
:: Работает не совсем понятно...
echo %CSI%5T
pause

:: CSI#S - прокрутить экран вниз на #
echo %CSI%20S

pause
cls

dir %windir%
pause

:: CSIJ - очистка экрана (по умолчанию от курсора до конца, аналог CSI0J)
echo %CSI%10A%CSI%J

pause
cls

dir %windir%
:: CSI1J - очистка экрана от начала экрана до курсора
echo %CSI%10A%CSI%1J

pause

:: CSI2J - очистка всего экрана
echo %CSI%2J

dir %windir%
pause

:: CSI2J+CSIH - аналог команды CLS
echo %CSI%2J%CSI%HCLS

pause

:: CSIK - очистка строки (по умолчанию от курсора до конца, аналог CSI0K)
echo Пример длинной строки в которой мы удалим конец строки после ее вывода на экран%CSI%25D%CSI%K

pause

:: CSI1K - от начала строки до курсора
echo Пример длинной строки в которой мы удалим начало строки после ее вывода на экран%CSI%25D%CSI%1K

pause

:: CSI2K - очистка всей строки
echo Пример длинной строки, которую мы удалим целиком%CSI%2K

:: CSI#L - вставить # пустых строк
:: CSI#M - удалить # строк
:: CSI#P - удалить (со смещением в строке) # символов в текущей строке
:: CSI#X - очистить (без смещения в строке) # символов в текущей строке
:: CSI#d - перемещает курсор вниз на # строк?

pause
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Thu, 04 Sep 2025 15:49:50 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=162677#p162677</guid>
		</item>
		<item>
			<title><![CDATA[Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=162675#p162675</link>
			<description><![CDATA[<p><strong>Цвет и начертание текста</strong></p><p>Список поддерживаемых CSI-кодов:</p><p><strong>CSI30-37m</strong> - цвет текста (палитра 8)<br /><em>0 - Black<br />1 - Red<br />2 - Green<br />3 - Yellow<br />4 - Blue<br />5 - Magenta<br />6 - Cyan<br />7 - White </em><br /><strong>CSI90-97m</strong> - яркий цвет текста (палитра 8)<br /><strong>CSI38;5;0-255m</strong> - цвет текста (палитра 256)<br /><em>0–7: базовые цвета<br />8–15: яркие<br />16–231: 6×6×6 RGB-куб<br />232–255: градации серого</em><br /><strong>CSI38;2;R;G;Bm</strong> - RGB-цвет текста<br /><em>R, G, B = 0-255</em><br /><strong>CSI39m</strong> - цвет текста по умолчанию<br /><strong>CSI40-47m</strong> - цвет фона (палитра 8)<br /><strong>CSI100-107m</strong> - яркий цвет фона (палитра 8)<br /><strong>CSI48;5;0-255m</strong> - цвет фона (палитра 256)<br /><strong>CSI48;2;R;G;Bm</strong> - RGB-цвет фона<br /><strong>CSI49m</strong> - цвет фона по умолчанию<br /><strong>CSI1m</strong> - яркий<br /><strong>CSI22m</strong> - яркий откл.<br /><strong>CSI7m</strong> - инверсный (негатив)<br /><strong>CSI27m</strong> - инверсный откл.<br /><strong>CSI4m</strong> - подчеркнутый<br /><strong>CSI24m</strong> - подчеркнутый откл.<br />Код CSI53m (надчеркнутый) не поддерживается. Имитация: выводить строкой выше подчеркнутый<br />Код CSI51m (обрамленный) не поддерживается. Имитация: использовать подчеркнутый и вертикальные слеши |<br />Код CSI8m (скрытый) не поддерживается. Имитация: CSI30;40m (черный текст на черном фоне или другие совпадающие цвета). Скрытый текст не виден в консоли, но может быть скопирован в буфер обмена посредством выделения<br /><strong>CSI0m</strong> - выключение всех атрибутов </p><p><strong>Комбинирование</strong><br />CSI-коды можно комбинировать через ;<br />Например:<br /></p><div class="codebox"><pre><code>echo %CSI%42;96mГолубой на зеленом (комбинирование)%CSI%0m</code></pre></div><p>Демонстрационный пример:</p><div class="codebox"><pre><code>@echo off
setlocal enabledelayedexpansion
cls

:: Получаем префикс CSI = ESC + [
for /f &quot;delims=&quot; %%a in (&#039;echo prompt $E[^| cmd /q /d /k&#039;) do set &quot;CSI=%%a&quot;

:: CSI30-37m - цвет текста (палитра 8)
:: 0 - Black
:: 1 - Red
:: 2 - Green
:: 3 - Yellow
:: 4 - Blue
:: 5 - Magenta
:: 6 - Cyan
:: 7 - White 
:: CSI39m - цвет текста по умолчанию
echo %CSI%31mКрасный текст%CSI%39m

:: CSI90-97m - яркий цвет текста (палитра 8)
echo %CSI%91mЯрко-красный текст%CSI%39m

:: CSI40-47m - цвет фона (палитра 8)
:: CSI49m - цвет фона по умолчанию
echo %CSI%44mСиний фон%CSI%49m

:: CSI100-107m - яркий цвет фона (палитра 8)
echo %CSI%104mЯрко-синий фон%CSI%49m

:: Комбинирование через ;
echo %CSI%42;96mГолубой на зеленом (комбинирование)%CSI%39;49m

:: CSI1m - яркий
:: CSI22m - яркий откл.
echo %CSI%32mВыделение текста %CSI%1mярким цветом%CSI%22m и обычный%CSI%39m

:: CSI7m - инверсный (негатив)
:: CSI27m - инверсный откл.
:: CSI0m - выключение всех атрибутов
echo %CSI%43;95mТекст %CSI%7m инверсный (негатив) %CSI%27m и обычный%CSI%0m

:: CSI4m - подчеркнутый
:: CSI24m - подчеркнутый откл.
echo %CSI%4mПодчеркнутый%CSI%24m

:: Код CSI53m (надчеркнутый) не поддерживается
:: Имитация: выводить строкой выше подчеркнутый
echo.
echo Код CSI%CSI%4m53m (надчеркн%CSI%24mутый) не поддерживается, но можно имитировать
echo Пример надчеркнутого текста

:: Код CSI51m (обрамленный) не поддерживается
:: Имитация: использовать подчеркнутый и вертикальные слеши |
echo   %CSI%4m                   %CSI%24m
echo   %CSI%4m^|Обрамленный текст^|%CSI%24m
echo.

:: Код CSI8m (скрытый) не поддерживается
:: Имитация: CSI30;40m (черный текст на черном фоне или другие совпадающие цвета)
:: Скрытый текст не виден в консоли, но может быть скопирован в буфер обмена посредством выделения
echo Скрытый невидимый текст тут: %CSI%30;40mсекретный код 123%CSI%0m
echo Можно выделить область со скрытым текстом: %CSI%37;47mсекретный код 123%CSI%0m

:: CSI38;5;0-255m - цвет текста (палитра 256)
:: 0-7: базовые цвета
:: 8-15: яркие
:: 16-231: 6?6?6 RGB-куб
:: 232-255: градации серого
echo.
echo 256-цветная палитра текста:
for /L %%i in (0,1,255) do (
    set /A &quot;nl=%%i %% 16&quot;
    &lt;nul set /p =&quot;%CSI%38;5;%%im#&quot;
    if !nl! EQU 15 echo.
)
echo %CSI%39m

:: CSI48;5;0-255m - цвет фона (палитра 256)
echo 256-цветная палитра фона:
for /L %%i in (0,1,255) do (
    set /A &quot;nl=%%i %% 16&quot;
    &lt;nul set /p =&quot;%CSI%48;5;%%im %CSI%49m&quot;
    if !nl! EQU 15 echo.
)

:: CSI38;2;R;G;Bm - RGB-цвет текста
:: R, G, B = 0-255
echo.
echo RGB-цвет текста:
for /L %%i in (10,2,248) do (
    &lt;nul set /p =&quot;%CSI%38;2;%%i;0;0m#&quot;
)
echo %CSI%39m

:: CSI48;2;R;G;Bm - RGB-цвет фона
echo.
echo RGB-цвет фона:
for /L %%i in (10,2,248) do (
	set /a b=255-%%i
    &lt;nul set /p =&quot;%CSI%48;2;0;%%i;!b!m &quot;
)
echo %CSI%49m

pause
</code></pre></div><p>Скриншот примера во вложении.</p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Thu, 04 Sep 2025 08:43:34 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=162675#p162675</guid>
		</item>
		<item>
			<title><![CDATA[CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=162674#p162674</link>
			<description><![CDATA[<p><a href="https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_ANSI">Управляющие последовательности ANSI</a> — символы, встраиваемые в текст, для управления форматом, цветом и другими опциями вывода в текстовом терминале.</p><p>В Microsoft Windows поддержка управляющих последовательностей ANSI появилась начиная с Windows 10.</p><p>Для управления выводом текста в консоль используются специальные ESC-коды. Выглядят они так:</p><p><strong>ESC[&lt;параметры&gt;&lt;буква-команда&gt;</strong></p><p>ESC[ — признак начала управляющей последовательности. ESC — непечатный символ с кодом 27 (U+001B). Набирается посредством Alt+27 или Alt+027, на экране выглядит как вопросик в квадрате или иначе, в зависимости от редактора.<br />&lt;параметры&gt; — цифры (иногда с ; ), указывают режим или количество.<br />&lt;буква-команда&gt; — финализирующий символ, указывающий какое именно действие.</p><p>Так как набирать непечатный символ ESC не очень удобно, да и скопировать текст с непечатными символами может быть проблематично (допустим, невозможно поделиться кодом на форуме), то можно программно получить префикс для <a href="https://ru.wikipedia.org/wiki/%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8_ANSI#CSI-%D0%BA%D0%BE%D0%B4%D1%8B">CSI-кодов</a>. Вот код для получения CSI-префикса:</p><div class="codebox"><pre><code>:: Получаем префикс CSI = ESC + [
for /f &quot;delims=&quot; %%a in (&#039;echo prompt $E[^| cmd /q /d /k&#039;) do set &quot;CSI=%%a&quot;</code></pre></div><p><a href="http://forum.script-coding.com/viewtopic.php?id=18484">Тема для обсуждения</a></p>]]></description>
			<author><![CDATA[null@example.com (Arigato)]]></author>
			<pubDate>Thu, 04 Sep 2025 07:33:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=162674#p162674</guid>
		</item>
	</channel>
</rss>
