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

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

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

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

いいえ、ほとんどの Windows アプリは 16 色しかサポートしていません。

ただし、Windows 10 Insiders ビルド #14931 では、Windows コンソールが更新され、24 ビット RGB True Color がサポートされるようになりました。

残念ながら、前述のように、ほとんどの Windows アプリではこの機能強化を利用できません (まだ)。

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

私たちが最も頻繁に受け取るリクエストの 1 つは、Windows コンソールがサポートできる色の数を増やすことです。私たちは、お客様のご要望に応える機能を提供することに全力を尽くします。

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

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

これをデモするのは実際には少し難しいです。ほとんどの Windows アプリは最大で 16 色しかサポートしていないのに対し、Linux の世界ではしばらく前から 256 色の端末が広くサポートされており、24 ビット カラーが定着しつつあるからです。

Windows Subsystem for Linux (WSL) 上の新しい Bash on Ubuntu on Windows 環境を使用して Linux アプリとスクリプトを実行できるため、いくつかの Linux スクリプトとツールを使用して、コンソールの新しい 24 ビット カラー サポートをデモンストレーションできます。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

コンソールの新しいカラー レンダリング機能をサポートするためにコンソール プロパティ ページを改善する作業はまだ開始しておらず、デフォルトの Windows カラー マッピングも変更していません。今後のビルドでは、この点と、バックログにキューされている他の多数の機能について改善を行う予定です。

ソースWindows コンソールで 24 ビット カラーを実現 | 開発者向け Windows コマンド ライン ツール

答え2

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

しかし、現在はANSIシーケンスのサポートを有効にするVirtualTerminalLevelでDWORDを作成してHKEY_CURRENT_USER\Consoleそしてその値を1に設定します。その後、bashで24ビットカラーがサポートされている場合は、任意の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ビットカラー

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ビットカラー

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

見るWin32 コンソールに ANSI/VT100 エスケープ シーケンスを認識させるにはどうすればよいでしょうか?

関連情報