Можно ли использовать больше цветов в пакетном скрипте?

Можно ли использовать больше цветов в пакетном скрипте?

У нас уже есть 16 цветов:

0 = Black       8 = Gray
1 = Blue        9 = Light Blue
2 = Green       A = Light Green
3 = Aqua        B = Light Aqua
4 = Red         C = Light Red
5 = Purple      D = Light Purple
6 = Yellow      E = Light Yellow
7 = White       F = Bright White

но я хочу использовать больше цветов в пакетном файле

Любая помощь?

решение1

Могу ли я использовать больше 16 цветов в пакетном файле Windows?

Нет, поскольку большинство приложений Windows поддерживают только 16 цветов.

Однако в сборке Windows 10 Insiders Build #14931 консоль Windows была обновлена ​​для поддержки 24-битного RGB-цвета.

К сожалению, как уже упоминалось выше, большинство приложений Windows пока не могут использовать это улучшение.

Однако при использовании подсистемы Windows для Linux (WSL) скрипты и инструменты Linux могут использовать новую 24-битную поддержку цвета в консоли:

Один из самых частых запросов, которые мы получаем, — это увеличение количества цветов, которые может поддерживать Windows Console. Мы не любим ничего больше, чем предоставлять функции, о которых вы просите!

Но вместо того, чтобы просто добавить еще несколько цветов или ограничить нашу консоль всего лишь 256 цветами, в сборке Windows 10 Insiders Build #14931,

мы обновили консоль Windows для поддержки полного, великолепного 24-битного RGB-цвета!

На самом деле это немного сложно продемонстрировать, поскольку большинство приложений Windows поддерживают максимум 16 цветов, тогда как мир Linux уже некоторое время поддерживает терминалы с 256 цветами, а 24-битный цвет становится все более распространенным.

Благодаря нашей возможности запускать приложения и скрипты Linux с помощью нашей новой среды Bash в Ubuntu на Windows поверх подсистемы Windows для Linux (WSL), мы можем использовать некоторые скрипты и инструменты Linux для демонстрации новой поддержки 24-битного цвета в консоли:

введите описание изображения здесь

введите описание изображения здесь

Мы еще не начали работу над улучшением страницы свойств консоли для поддержки новых возможностей цветопередачи консоли и не изменили стандартные цветовые сопоставления Windows; мы будем вносить улучшения здесь и во многие, МНОГИЕ другие функции, запланированные в будущих сборках.

Источник24-битный цвет в консоли Windows! | Инструменты командной строки Windows для разработчиков

решение2

Windows 10 conhost.exeподдерживает лиEscape-коды ANSIвключая 24-битный цвет. Смотреть

Однако в настоящее время вам необходимовключить поддержку последовательности ANSIв создав DWORD с именем VirtualTerminalLevelвHKEY_CURRENT_USER\Consoleи установите его значение на 1. После этого, если 24-битный цвет поддерживается в bash, то вы также можете использовать 24-битный цвет ANSI в любых сеансах cmd или PowerShell. Ниже приведен пример cmd

echo ESC[38;2;40;177;249m color: 40;177;249 ESC[0m
echo ESC[38;2;255;255;100m color: 255;255;100
echo ESC[48;2;200;0;200m color: 200;0;200 ESC[0m

К сожалению, я не могу вставить сюда необработанный экранированный символ, поэтому вам придется заменить его ESCна настоящий экранированный символ (ASCII-код 27/0x1B) локально. Вот пример вывода:

cmd 24-битный цвет

В PowerShell проще встроить escape-символ как [char]0x1B, [char]27, `u{001B}или `eбез разрешения методов для вставки необработанного escape-символа

echo "$([char]0x1B)[38;2;40;177;249m color: 40;177;249 $([char]0x1B)[0m"
echo "$([char]0x1B)[38;2;255;255;100m color: 255;255;100"
echo "$([char]0x1B)[48;2;200;0;200m color: 200;0;200 $([char]0x1B)[0m"

powershell 24-битный цвет

Вы также можете проверитьобнаружить ANSI-совместимую консоль из пакетного файла Windowsи печатать 4-битный или 24-битный цвет в зависимости от текущей консоли. В PowerShell это намного проще, просто используйте$Host.UI.SupportsVirtualTerminal

ВидетьКак заставить консоль Win32 распознавать escape-последовательности ANSI/VT100?

Связанный контент