Windowsのコマンドプロンプトでテキストの色を変更するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/77744

質問

ログを画面に出力するコマンドラインプログラムがあります。

エラー行を赤色で表示したい。テキストの色を赤に切り替えてから白に戻すために出力できる特殊な文字コードはありますか?

私は 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 関数

http://msdn.microsoft.com/en-us/library/ms686047.aspx

古い ANSI の多く カラーコード 仕事。前景が赤のコードは、Escape-[31m.エスケープは文字 27 なので、エスケープ スキームに応じて、「\033[31m」または「\x1B[31m」」になります。

[39mはデフォルトの色に戻すコードです。

複数のコードを一度に指定して、前景色と背景色を同時に設定することもできます。

ANSI.sys をロードする必要がある場合があります。を参照してください。 このページ.

最終的には電話する必要があります SetConsoleTextAttribute. 。コンソール画面のバッファハンドルは次から取得できます。 GetStdHandle.

私は、UNIX tail コマンドの Windows 対応バージョンを実行できる、baretail (ググってください) と呼ばれるフリーウェアの Windows tail プログラムを長年使用してきました。定義したキーワードに応じて線に色を付けることができます。ソリューションとして優れているのは、特定の言語や設定などに関連付けられていないことです。カラースキームを定義するだけで、ドンキーコングのようにオンにできます。私の個人的なフリーウェア ヘルパーのトップ 10 に入ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top