![Можно ли использовать больше цветов в пакетном скрипте?](https://rvso.com/image/1585769/%D0%9C%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%BB%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B5%20%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%B2%20%D0%B2%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BD%D0%BE%D0%BC%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B5%3F.png)
У нас уже есть 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) локально. Вот пример вывода:
В 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"
Вы также можете проверитьобнаружить ANSI-совместимую консоль из пакетного файла Windowsи печатать 4-битный или 24-битный цвет в зависимости от текущей консоли. В PowerShell это намного проще, просто используйте$Host.UI.SupportsVirtualTerminal
ВидетьКак заставить консоль Win32 распознавать escape-последовательности ANSI/VT100?