Не поддерживаются цвета консоли Windows 10 (последовательности символов управления виртуальными терминалами)

Цвета текста консоли не работают в Windows 10 build 15063.296.
Я немного впился в нее и оказался потерянным. Здесь все, что я нашел...

Из нескольких обсуждений кажется, что поддержка "виртуальных терминальных последовательностей" или "контрольных последовательностей символов" была удалена в последних версиях Windows 10 (# 1, # 2). Некоторым также рекомендуется понизить версию git (это не помогло мне).

Я попытался скопировать cmd.exe с моей другой машины, версия была 10.0.10586.0, и работа с раскраской, однако, при дальнейшем чтении и экспериментировании, я больше не уверен, где проблема.

См. сравнение выходов ls --color=auto
git\git-cmd.exe, git\git-bash.exe, оригинал cmd.exe и старше cmd.exe

ls --color = автовыходы в нескольких консолях

Согласно этот сайт, поддержка раскраски не лежит в командном окне, а в conhost.exe, который вызывает вопрос - Почему он работает в некоторых консолях, а в некоторых нет?

Если вы запустите файл powershell.exe из cmd.exe, он наследует настройки conhost с момента присоединения к ранее созданной консоли, не выделяя новую; это также позволяет escape-последовательности в файле powershell.exe.

Учитывая эту цитату, я попробовал следующее, что только углубило мое замешательство. Я запускаю команду ls --color=auto в каждой версии cmd, затем пытаюсь запустить более старый cmd из более нового и наоборот и получил следующие результаты. (красная подчеркивание cmd v15063, зеленая подчеркивание cmd v10586)

старый, новый от старого
MYxMz.png

новый, старый от нового aIIOv.png

/EDIT Я сделал несколько экспериментов...

Интересным/запутанным является другой результат type и cat и сравниваемый результат ls --color=auto с тем же содержимым type d из файла.

Старая консоль старая консоль

Новая консоль новая консоль

Консольные виртуальные терминальные последовательности msdn
историческая документация ANSI.SYS

Ответ 1

На данный момент я "исправил" его, заменив более новый cmd_10.0.15063.0 на более старый cmd_10.0.10586.0, который я скопировал из старой системы. Если вы запустили обновление Windows, вы можете найти более старую версию cmd в C:\Windows.old\Windows\System32\cmd.exe. (папка скрыта)

Чтобы заменить систему cmd.exe, вам нужно взять на себя права собственности на файл Properties -> Security -> Advanced, там наверху Owner: TrustedInstaller (Change), установить на Administrators, а затем предоставить администраторам полные разрешения в Permissions -> Change permissions -> Administrators -> Edit -> Full control.