1 (изменено: Arigato, 2025-09-02 01:32:33)

Тема: CMD/BAT: Управляющие последовательности ANSI/ECMA-48

Дополним тему CMD/BAT: Вывод разноцветного текста, точнее предложим совершенно новое и куда более продвинутое решение.

О чем идет речь, подробнее читайте тут - Управляющие последовательности ANSI

Данная методика работает начиная с Windows 10.

https://i.ibb.co/MkKwQgnL/2.png

Для управления выводом текста в консоль используются специальные ESC-коды. Выглядят они так:

ESC[<параметры><буква-команда>

ESC[ — признак начала управляющей последовательности. Непечатный символ с кодом 27 (U+001B). Набирается посредством Alt+27 или Alt+027, на экране выглядит как вопросик в квадрате или иначе, в зависимости от редактора.
<параметры> — цифры (иногда с ; ), указывают режим или количество.
<буква-команда> — финализирующий символ, указывающий какое именно действие.

Так как символ ESC непечатный, то не всегда удастся вставить код в сообщение, примеры надо качать из вложений.

Команда m задает цвет текста и фона (цвет задается или из палитры 16, или из палитры 256, или по RGB), различные начертания шрифта (подчеркнутый, жирный).

Цвета из палитры 16

https://i.ibb.co/yFj4Tmdt/1.png

Цвета из палитры 256

ESC[38;5;<n>m   → цвет текста
ESC[48;5;<n>m   → цвет фона

где <n> от 0 до 255.
0–7: базовые цвета
8–15: яркие
16–231: 6×6×6 RGB-куб
232–255: градации серого

Полноцветный (TrueColor, 24-бит)

ESC[38;2;R;G;Bm   → текст (R,G,B = 0–255)
ESC[48;2;R;G;Bm   → фон

Пример:

echo Оранжевый текст

Основные атрибуты

ESC[0m   → сброс атрибутов
ESC[1m   → жирный / яркий цвет
ESC[2m   → тусклый
ESC[3m   → курсив (обычно игнорируется)
ESC[4m   → подчёркивание
ESC[5m   → мигающий (обычно игнорируется)
ESC[7m   → инверсия
ESC[8m   → скрытый
ESC[9m   → зачёркнутый
ESC[22m  → отмена жирного/тусклого
ESC[24m  → отмена подчёркивания
ESC[27m  → отмена инверсии
ESC[30–37m  → цвет текста
ESC[40–47m  → цвет фона
ESC[90–97m  → яркие цвета текста
ESC[100–107m → яркие цвета фона
ESC[38;5;#m  → текст 256-цвет
ESC[48;5;#m  → фон 256-цвет
ESC[38;2;R;G;Bm → текст TrueColor (24-бит)
ESC[48;2;R;G;Bm → фон TrueColor (24-бит)

Работает далеко не все...

Комбинирование

Можно комбинировать через ;. Например:

подчёркнутый красный
жёлтый инверсный

Сброс всех атрибутов

ESC[0m   → сброс атрибутов

Очистка экрана

ESC[J    → очистка экрана (по умолчанию от курсора до конца)
ESC[0J   → от курсора до конца экрана
ESC[1J   → от начала экрана до курсора
ESC[2J   → весь экран
ESC[3J   → весь экран + буфер (если поддерживается)

ESC[K    → очистка строки (по умолчанию от курсора до конца)
ESC[0K   → от курсора до конца строки
ESC[1K   → от начала строки до курсора
ESC[2K   → вся строка

Управление курсором

ESC[#A   → вверх # строк
ESC[#B   → вниз # строк
ESC[#C   → вправо # колонок
ESC[#D   → влево # колонок
ESC[#E   → на начало строки, ниже на #
ESC[#F   → на начало строки, выше на #
ESC[#G   → в колонку #
ESC[H → курсор в левый верхний угол
ESC[#;#H → в строку;колонку (позиция курсора)
ESC[#;#f → то же самое (альтернативная форма)

ESC[s    → сохранить позицию курсора
ESC[u    → восстановить позицию курсора

ESC[?25l → скрыть курсор
ESC[?25h → показать курсор

ESC[6n   → выводит текущее положение курсора в формате ^[[n;mR, где n — строка, m — столбец. Ответ попадает в поток ввода. Пока непонятно, как его считать...

Прокрутка

ESC[#S    → прокрутить экран вверх на #
ESC[#T    → прокрутить экран вниз на #

Пример:

@echo off
echo Очистка экрана: 
echo Красный текст: Hello
echo Подчёркнутый: Text
echo Инверсия: Inverted

Более полная демка во вложении. Скрины демки:

https://i.ibb.co/Vc2sYD8X/1.png https://i.ibb.co/TxG1N1fK/3.png

Post's attachments

1.cmd 2.24 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2

Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48

Это демка из стартового скриншота.

Код:

@echo off
setlocal enabledelayedexpansion

:: Очистка экрана
echo 

:: Приветствие
echo Добро пожаловать в DEMO ANSI!
echo.

:: Несколько сообщений разными цветами
echo Это сообщение жёлтым
echo Это сообщение синим
echo Это сообщение красным
echo.

:: Подчёркнутые строки
echo Подчёркнутый текст циан
echo Подчёркнутый текст магента
echo.

:: Инверсия (swap foreground/background)
echo Инверсное сообщение жёлтое
echo Инверсное сообщение зелёное
echo.

:: Комбинация эффектов
echo Жирный + подчёркнутый + красный
echo Инверсное + синий

echo.
echo Нажмите любую клавишу, чтобы выйти...
pause >nul

Но надо качать из вложения из-за непечатных ESC-символов:

Post's attachments

2.cmd 710 b, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

3

Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48

Развиваем эту идею дальше. Можно программно получить префикс для CSI-кодов, чтобы не использовать в коде непечатные символы. Вот код для получения CSI-префикса:

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

Теперь спокойно можно копировать код прямо на форум, так как непечатных символов больше нет. Вот код демонстрационного примера (копируйте прямо от сюда, больше нет нужны прикреплять пример в качестве вложения):

@echo off
setlocal enabledelayedexpansion

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

echo Пример использования управляющих последовательностей
echo %CSI%91mКрасный текст%CSI%0m
echo %CSI%44mСиний фон%CSI%0m
echo %CSI%42;96mГолубой на зеленом%CSI%0m
echo %CSI%7mИнверсный%CSI%27m
echo %CSI%4mПодчеркнутый%CSI%24m

Post's attachments

1.png
1.png 4.2 kb, 1 downloads since 2025-09-02 

You don't have the permssions to download the attachments of this post.

4

Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48

Применяем CSI-коды в приглашении командной строки

CSI-коды отлично работают в промпте. Вот пример батника, который поменяет цвет приглашения на ярко-желтый:

@echo off

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

:: Ярко-желтое приглашение командной строки
prompt %CSI%93m$P$G%CSI%0m
Post's attachments

2.png 22.41 kb, 1 downloads since 2025-09-02 

You don't have the permssions to download the attachments of this post.

5

Re: CMD/BAT: Управляющие последовательности ANSI/ECMA-48

Более структурированное описание см. здесь - CMD/BAT: Управляющие последовательности ANSI/ECMA-48 (цвет и прочее)