Windowsのコマンドプロンプトでテキストの色を変更するにはどうすればよいですか
-
09-06-2019 - |
質問
ログを画面に出力するコマンドラインプログラムがあります。
エラー行を赤色で表示したい。テキストの色を赤に切り替えてから白に戻すために出力できる特殊な文字コードはありますか?
私は Ruby を使用していますが、これは他の言語でも同じだと思います。
何かのようなもの:
red = "\0123" # character code
white = "\0223"
print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
解決
[Win32 コンソール API](http://msdn.microsoft.com/en-us/library/ms682073(VS.85%29.aspx). 。残念ながら、Ruby からそれをどのように行うかはわかりません。Perl では、 Win32::コンソール モジュール。Windows コンソールは ANSI エスケープ コードに応答しません。
による Ruby 出力の色付けに関する記事 artur02 が言及したように、win32console gem をインストールしてロードする必要があります。
他のヒント
Windows では、次の 3 つの方法で簡単に実行できます。
require 'win32console'
puts "\e[31mHello, World!\e[0m"
これで、という小さなメソッドを使用して String を拡張できるようになりました。 red
require 'win32console'
class String
def red
"\e[31m#{self}\e[0m"
end
end
puts "Hello, World!".red
また、次のように String を拡張して、より多くの色を取得することもできます。
require 'win32console'
class String
{ :reset => 0,
:bold => 1,
:dark => 2,
:underline => 4,
:blink => 5,
:negative => 7,
:black => 30,
:red => 31,
:green => 32,
:yellow => 33,
:blue => 34,
:magenta => 35,
:cyan => 36,
:white => 37,
}.each do |key, value|
define_method key do
"\e[#{value}m" + self + "\e[0m"
end
end
end
puts "Hello, World!".red
または、gem をインストールできる場合:
gem install term-ansicolor
そしてあなたのプログラムでは:
require 'win32console'
require 'term/ansicolor'
class String
include Term::ANSIColor
end
puts "Hello, World!".red
puts "Hello, World!".blue
puts "Annoy me!".blink.yellow.bold
詳細と可能な使用法については、term/ansicolor のドキュメントを参照してください。
ここで、図入りの優れた記事を読むことができます。http://kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/
コンソールのテキストの色の設定はかなり言語固有だと思います。MSDN の C# の例を次に示します。
for (int x = 0; x < colorNames.Length; x++)
{
Console.Write("{0,2}: ", x);
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorNames[x]);
Console.Write("This is foreground color {0}.", colorNames[x]);
Console.ResetColor();
Console.WriteLine();
}
Console.ForegroundColor テキストの色を設定するためのプロパティです。
ANSI エスケープ シーケンスを使用することもできますが、最新の Windows バージョンでは期待どおりの動作は行われません。ウィキペディアには非常に有益な記事があります。
http://en.wikipedia.org/wiki/ANSI_escape_code
したがって、元の質問に対する答えは、ほぼ間違いなく「いいえ」です。ただし、たとえばWin32 API関数を呼び出すことにより、エスケープシーケンスを書くことなく前景の色を変更できます。Ruby でこのようなことを行う方法が頭からはわかりませんが、他の誰かがなんとかできたようです。
http://blade.nagakiut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/241925
濃い赤には 4 を、明るい赤には 12 を使用し、デフォルトの色に戻すには 7 を使用すると思います。
お役に立てれば!
ANSI エスケープ コードについて:
32 ビット文字モード (サブシステム:コンソール) Windows アプリケーションは、ANSI エスケープ シーケンスをコンソールに書き込みません
エスケープ コード アクションを解釈し、代わりにネイティブ コンソール API を呼び出す必要があります。
ありがとうマイクロソフト:-(
color [background][foreground]
ここで、色は次のように定義されます。
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
たとえば、背景を青、前景をグレーに変更するには、次のように入力します。
color 18
私は、MRI と JRuby の両方で Windows または POSIX システム上でシームレスに動作する、これを処理する小さなクロスプラットフォームの gem を作成しました。
依存関係はなく、POSIX システムでは ANSI コードを使用し、Windows では FFI (JRuby) または Fiddler (MRI) を使用します。
これを使用するには、次のようにするだけです。
gem install color-console
ColorConsole は、Console.write 関数と Console.puts 関数を使用して、テキスト行をさまざまな色で出力するメソッドを提供します。
require 'color-console'
Console.puts "Some text" # Outputs text using the current console colours
Console.puts "Some other text", :red # Outputs red text with the current background
Console.puts "Yet more text", nil, :blue # Outputs text using the current foreground and a blue background
# The following lines output BlueRedGreen on a single line, each word in the appropriate color
Console.write "Blue ", :blue
Console.write "Red ", :red
Console.write "Green", :green
プロジェクトのホームページにアクセスしてください。 https://github.com/agardiner/color-console 詳細については。
私の知る限り、コマンドラインでは不可能で、1色だけです...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Console_Test
{
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}
簡単な C# プログラムを使用して色を変更できます。 http://powerof2games.com/node/31 では、コンソール出力をラップして効果を実現する方法について説明します。
あなたが欲しいのは ANSIエスケープコード.
コマンド ラインへの出力に関する標準の C/C++ 仕様では、コンソール ウィンドウの色を変更する機能が指定されていません。とはいえ、Win32 にはそのようなことを行うための関数がたくさんあります。
Win32 コンソールの色を変更する最も簡単な方法は、iostream.h のシステム コマンドを使用することです。この関数は DOS コマンドを呼び出します。色を変更するには、それを使用して color コマンドを呼び出します。例えば、 system("Color F1");
コンソールは白地に紺色になります。
DOSカラー
このコマンドで使用できる色は、それぞれ 16 進数で表される 16 色の DOS 色です。1 つ目は背景、2 つ目は前景です。
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
ほんの少し色を加えるだけで、コンソール プログラムがより視覚的に楽しくなります。ただし、Color コマンドはコンソール全体の色を変更します。個々のセルを制御するには、windows.h の関数を使用する必要があります。
使用する必要があることを実行してください SetConsoleAttribute
関数
最終的には電話する必要があります SetConsoleTextAttribute. 。コンソール画面のバッファハンドルは次から取得できます。 GetStdHandle.
私は、UNIX tail コマンドの Windows 対応バージョンを実行できる、baretail (ググってください) と呼ばれるフリーウェアの Windows tail プログラムを長年使用してきました。定義したキーワードに応じて線に色を付けることができます。ソリューションとして優れているのは、特定の言語や設定などに関連付けられていないことです。カラースキームを定義するだけで、ドンキーコングのようにオンにできます。私の個人的なフリーウェア ヘルパーのトップ 10 に入ります。