web-dev-qa-db-ja.com

バッチスクリプトでより多くの色を使用できますか?

すでに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

しかし、バッチファイルでより多くの色を使用したい

何か助け?

Windowsバッチファイルで16色以上を使用できますか?

いいえ、ほとんどのWindowsアプリは16色しかサポートしていないためです。

ただし、Windows 10 Insiders Build#14931では、24ビットRGBトゥルーカラーをサポートするようにWindowsコンソールが更新されました。

残念ながら、上記のとおり、ほとんどのWindowsアプリはこの拡張機能を(まだ)利用できません。

ただし、Linux(WSL)用のWindowsサブシステムを使用すると、Linuxのスクリプトとツールでコンソールの新しい24ビットカラーサポートを使用できます。

よく寄せられるリクエストの1つは、Windowsコンソールでサポートできる色の数を増やすことです。私たちはあなたが求める機能を提供すること以外に何も愛しています!

しかし、Windows 10 Insiders Build#14931で、色を追加したり、コンソールを256色に制限したりするのではなく、

windowsコンソールを更新して、見事な24ビットRGBトゥルーカラーをサポートしました。

ほとんどのWindowsアプリは最大で16色しかサポートしないので、これは実際には少しトリッキーです。一方、Linuxの世界ではしばらくの間256色の端末を幅広くサポートしており、24ビットカラーが確立されつつあります。

Linux用のWindowsサブシステム(WSL)の上にあるWindows環境でUbuntuの新しいBashを使用してLinuxアプリとスクリプトを実行できるおかげで、いくつかのLinuxスクリプトとツールを使用して、コンソールの新しい24ビットカラーサポートを示すことができます。

enter image description here

enter image description here

コンソールの新しいカラーレンダリング機能をサポートするようにコンソールのプロパティページを改善する作業はまだ開始しておらず、デフォルトのWindowsカラーマッピングは変更していません。ここで改良を加え、多くのその他の多くの機能を将来のビルドのバックログに入れます。

ソース Windowsコンソールの24ビットカラー!|開発者向けWindowsコマンドラインツール

6
DavidPostill

Windows 10 conhost.exeは24ビットカラーを含む ANSIエスケープコードをサポートしています。見る

ただし、現在、VirtualTerminalLevelという名前のDWORDをHKEY_CURRENT_USER\Consoleに作成してその値を設定することにより、ANSIシーケンスサポートを有効にする必要があります to 1.その後、24ビットカラーがbashでサポートされている場合は、任意のcmdまたはPowerShellセッションでも24ビットANSIカラーを使用できます。以下は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-bit color

PowerShellでは、生のエスケープ文字を貼り付けるメソッドに解決せずに、エスケープ文字を[char]0x1B[char]27`u{001B}または`eとして埋め込む方が簡単です。

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-bit color

WindowsバッチファイルからANSI互換コンソールを検出する を確認し、現在のコンソールに応じて4ビットまたは24ビットの色を印刷することもできます。 PowerShellでは、はるかに単純です。$Host.UI.SupportsVirtualTerminalを使用するだけです。

参照 win32コンソールにANSI/VT100エスケープシーケンスを認識させる方法

2
phuclv