Как изменить цвет строки в CMD? — Хабр Q&A

Console color editor — создаем и редактируем цветовые схемы командной строки | белые окошки

В Windows 10 дизайнеры Microsoft хорошо поработали над улучшением внешнего вида командной строки, добавив новые настройки цветовых схем и реализовав прозрачность, но всё же в целом ее интерфейс остается таким же скучным. Если собственные цветовые настройки командной строки вас не устраивают, попробуйте Console Color Editor — небольшое приложение, предназначенное для создания и редактирования цветовых схем консоли CMD.

В программе уже имеется небольшой набор готовых цветовых схем, но служат они скорее для демонстрации работы приложения. Цветные кнопки, расположенные в верхней части окна редактора, соответствуют цветовому ряду на вкладке «Цвета» в свойствах командной строки. Клик по такой кнопке вызывает окошко системной палитры Windows, с помощью которой пользователь может изменить текущий цвет, если же кликнуть по кнопке с зажатой клавишей Ctrl, откроется окошко для вставки цвета в HEX-формате, что удобно при копировании из других источников.

Console Color Editor

Console Color Editor

Console Color Editor

Кнопка «Apply» применяет настройки, «New» — служит для создания новой схемы, «Save» — сохраняет внесенные изменения. Для предпросмотра результата служит кнопка «Preview in CMD». Отдельной настройки, позволяющей изменять цвет текста в Console Color Editor нет, применение новых параметров подразумевает прежде всего редактирование схемы в настройках самой командной строки, то есть чтобы изменить цвет шрифта, вам всё равно нужно будет зайти в свойства консоли.

Console Color Editor

Console Color Editor

Скачать утилиту можно с сайта разработчика:

apps.codigobit.info/2021/08/console-color-editor-and-manager.html

Распространяется редактор цветовых схем командной строки на бесплатной основе, в установке не нуждается, язык простого интерфейса — английский. В текущей версии утилиты есть небольшой баг (?), из-за которого настройки применяются только к командной строке, запущенной с правами администратора, также по какой-то причине у нас оказалась неактивной кнопка сброса параметров «Reset CMD settings».

Альтернативное решение – программа nhcolor

В итоге, пришлось написать решение, которое

  • может менять цвет текста в консоли по строкам
  • не ограничивает выводимый текст
  • не требует административных полномочий.

Итак, программа nhcolor имеет два варианта запуска.

Как изменить цвет для окна консоли c

Сам спросил – сам и отвечу.

Внимание! Представленные ниже способы подходят только для Windows систем! Для Linux используйте библиотеку ncurses.


Можно менять цвет фона окна и символов без дополнительных библиотек, простой функцией system(). Достаточно написать, например, system("color F0") и будет установлен белый фон (F) и чёрный текст (0). Можно писать и наоборот, например: system("color 3F"); установит голубой фон и белый текст.

:/>  Ошибка при компилировании undefined reference to? — Хабр Q&A

Список цветов:

  • 0 — черный
  • 1 — синий
  • 2 — зеленый
  • 3 — голубой
  • 4 — красный
  • 5 — лиловый
  • 6 — желтый
  • 7 — белый
  • 8 — серый
  • 9 — свело-синий
  • A — светло-зеленый
  • B — светло-голубой
  • С — светло-красный
  • E — светло-желтый
  • F — ярко-белый

Можно использовать функцию SetConsoleTextAttribute() из Windows.h:

HANDLE h;
h = GetStdHandle(STD_OUTPUT_HANDLE); //получаем наше окно, в котором нужно изменить цвет

И установим жёлтый цвет на зелёном фоне:

SetConsoleTextAttribute(h, (((2 << 4) | 14)));

Что же это за страшная функция? Если кратко: число смещается на 4 бита влево и объединяется со вторым в результате логического ИЛИ. Эти действия объединят числа, чтобы функция установила нужный цвет и фон. Если интересно, можно взять результат этих операций (в данном случае 46) и скормить их функции:

SetConsoleTextAttribute(h, 46);

И вы получите такой же результат. Но настраивать гораздо удобнее по двум числа (первая отвечает за фон, вторая за текст).


Вот список цветов для этой функции:

  • Чёрный – 0
  • Синий – 1
  • Зелёный – 2
  • Голубой – 3
  • Красный – 4
  • Пурпурный – 5
  • Коричневый – 6
  • Светло-серый – 7
  • Тёмно-серый – 8
  • Светло-синий – 9
  • Светло-зелёный – 10
  • Светло-голубой – 11
  • Светло-красный- 12
  • Светло-пурпурный – 13
  • Жёлтый – 14
  • Белый – 15

Внимание! Функция system("color ...") устанавливает цвет для всей консоли и всех символов, а SetConsoleTextAttribute(); только для символов и той части консоли, которая находится под ними. примеры функций

Как изменить цвет строки в cmd?

Сам я ни черта не понимаю в cmd, поэтому искал решение в интернетах.

Насколько я понял, color для этого не используют т.к. он меняет цвет во всей сессии. Зато используют какой-то хак с командой findstr, которой можно явно указать цвет выводимого ею сообщения.

Вот что нарыл:

:write
  setlocal
  :write1
  set "tempFolder=%TEMP%%~n0.%time:~-2%.%random%"
  md "%tempFolder%" 2>nul || goto write1
  pushd %tempFolder%
  set /p .=.<nul>"%~2"
  findstr /a:%~1 /c:"." /s "%~2"
  popd
  rd /s /q "%tempFolder%" 2>nul
endlocal & exit /b

:writeLn
  call :write %1 "%~2"
  echo:
exit /b

Эта фигня работает почти как надо, за исключением того, что добавляет двоеточие и точку в конце. То есть вызов call :write 0A "My Charona" вернет My Charona:., где My Charona и двоеточие будут зеленого цвета, а точка – дефолтного.

:/>  Как запустить двигатель флоппи дисковода без компьютера

Некоторые строчки кода для меня почти ясны (findstr /a:%~1 /c:"." /s "%~2"), некоторые вообще черная магия (set /p .=.<nul>"%~2").

Можно ли как-то избавиться от двух последних символов в строке, которую выводит findstr?

Кстати, да: если из кода убрать все операции с директориями, функционал не меняется абсолютно, все работает так же.

Параметры

В следующей таблице перечислены допустимые шестнадцатеричные числа, которые можно задать в качестве значений параметров т и ф.

Примеры использования

Чтобы изменить цвет текста на красный, а цвет фона на белый в окне командной строки, введите следующую команду:

color FC

Примечания

  • Чтобы задать стандартные цвета в окне командной строки, щелкните левый верхний угол этого окна, выберите команду Умолчания, перейдите к вкладке Цвета и укажите цвета для параметров Текст на экране и Фон экрана.
  • Для изменения цветов окна командной строки в текущем сеансе можно воспользоваться командой cmd /t:тф.
  • Если цвета текста и фона совпадают, команда color устанавливает значение параметра ERRORLEVEL в единицу (1).

Способы изменения цвета в командной строке и bat файле

Есть несколько довольно часто используемых способов, но они имеют существенные недостатки

Таблица цветов

Такая же, как в команде COLOR, поэтому её всегда можно посмотреть командой COLOR /?

Атрибуты цветов задаются в виде ДВУХ шестнадцатеричных цифр -- первая
задает цвет фона, а вторая определяет цвет переднего плана.  Каждая цифра может
иметь следующие значения:

0 = Черный      8 = Серый
1 = Синий       9 = Светло-синий
2 = Зеленый     A = Светло-зеленый
3 = Голубой     B = Светло-голубой
4 = Красный     C = Светло-красный
5 = Лиловый     D = Светло-лиловый
6 = Желтый      E = Светло-желтый
7 = Белый       F = Ярко-белый

Цвет текста входного потока stdin

Программа выводит в заданном цвете весь поток, поступающий на stdin.

Цвет текста задаётся параметром, например, 0c — это светло-красный текст на черном фоне, а входной поток направляется в nhcolor

:/>  Как перенаправить вывод одной команды в _аргумент_ другой команды? — Хабр Q&A

Цвет текста, заданного в командной строке

Программа выводит текст, указанный в командной строке, заданным цветом.

Цвет текста задаётся первым параметром, например, 0a — это светло-зелёный текст на черном фоне, а выводимый текст задаётся в аргументах nhcolor

nhcolor 0a Архивирование закончено

Результат:
Пример nhcolor

Ещё один пример, который показывает вывод всех 15 доступных цветов текста на черном тексте:

Цветовое оформление консольного вывода

Кратко о том, как сделать для своей консольной программы или скрипта цветной вывод текста, а также дополнить его другими элементами оформления. Собственно, назначить можно цвет текста, цвет фона под ним, сделать текст жирным, подчеркнутым, невидимым и даже мигающим.

Шаблон для использования в современных командных оболочках и языках программирования таков: x1b[m. Это ESCAPE-последовательность, где x1b обозначает символ ESC (десятичный ASCII код 27), а вместо “…” подставляются значения из таблицы, приведенной ниже, причем они могут комбинироваться, тогда нужно их перечислить через точку с запятой.

атрибуты
0нормальный режим
1жирный
4подчеркнутый
5мигающий
7инвертированные цвета
8невидимый
цвет текста
30черный
31красный
32зеленый
33желтый
34синий
35пурпурный
36голубой
37белый
цвет фона
40черный
41красный
42зеленый
43желтый
44синий
45пурпурный
46голубой
47белый

Теперь несколько примеров. Все это можно опробовать, введя в консольном окне echo -e "текст примера".

Обратите внимание, что во всех трех случаях после слова Test идет последовательность x1b[0m, которая просто сбрасывает стиль оформления на стандартный.

Комплексный пример использования:

Хорошая раскраска вывода часто значительно облегчает восприятие информации. Так что пробуйте и экспериментируйте.

P.S. Также об этом и некотором другом можно прочитать в man console_codes. Спасибо Riateche за подсказку.

Оставьте комментарий