如何在Windows命令提示符下更改文本颜色

问题描述:

我有一个命令行程序,它将日志记录输出到屏幕上。如何在Windows命令提示符下更改文本颜色

我想让错误行显示为红色。是否可以输出一些特殊字符代码将文本颜色切换为红色,然后将其切换回白色?

我使用红宝石,但我想这将是相同的任何其他语言。

喜欢的东西:

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)。不幸的是,我不知道你会怎么做,从红宝石。在Perl中,我会使用Win32::Console模块,Windows控制台并不ANSI转义码响应。

根据该artur02提到article on colorizing Ruby output,您需要安装&负载win32console宝石。

据我知道这是不可能的命令行,它仅仅是一个颜色......

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 escape codes

+2

ANSI转义代码在Windows命令提示符上本地不可用。 – 2010-09-14 11:21:03

很多旧的ANSI Color Codes工作。红色前景的代码就像Escape- [31m。逃生是字符27,因此这是“\ 033 [31m”或“\ x1B [31m”,取决于您的逃跑计划。

[39m是返回默认颜色的代码。

也可以同时指定多个代码以同时设置前景色和背景色。

您可能需要加载ANSI.sys,请参阅this page

你可以在这里读好,并说明文章: 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是用于设置文本颜色的属性。

用于输出到命令行的标准C/C++规范未指定更改控制台窗口颜色的任何功能。也就是说,Win32中有很多功能可以做这样的事情。

更改Win32控制台颜色的最简单方法是通过iostream.h中的系统命令。这个函数调用一个DOS命令。要改变颜色,我们将使用它来调用颜色命令。例如,system("Color F1");将使控制台darkblue在白色。

DOS颜色

可用于与所述命令中使用的颜色是16种DOS颜色每一个十六进制数字来表示。第一个是背景,第二个是前景。

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

最终您需要致电SetConsoleTextAttribute。您可以从GetStdHandle获得控制台屏幕缓冲区句柄。

您可以使用ANSI转义序列,但在现代版本的Windows下不会执行您想要的操作。*有一个非常丰富的文章:

http://en.wikipedia.org/wiki/ANSI_escape_code

所以回答你原来的问题是几乎可以肯定是“不”。但是,您可以在不编写转义序列的情况下更改前景色,例如通过调用Win32 API函数。我不知道该怎么做这样的事情在Ruby中了我的头顶部,但其他人似乎已经管理:

http://blade.nagaokaut.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

+0

用于cygwin:alias color ='cmd/c color' – zzapper 2014-01-28 12:07:19

我一直使用一个名为baretail的免费软件窗口尾巴程序(谷歌它)的年龄,让你做一个Windows应用程序版本的Unix命令。它可让您根据您定义的任何关键字对行进行着色。作为一种解决方案,它的优点在于它与特定的语言或设置等无关,您只需定义您的配色方案,并像驴kong一样定义。在我的个人十大免费软件助手中!

在Windows上,您可以通过三种方式轻松地做到这一点:

require 'win32console' 
puts "\e[31mHello, World!\e[0m" 

现在你可以用一个叫red

require 'win32console' 
class String 
    def red 
    "\e[31m#{self}\e[0m" 
    end 
end 

puts "Hello, World!".red 

你也可以扩展字符串这样让小法延长字符串更多颜色:

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

请参阅项的文档/ ansicolor更多的信息和可能的使用。

+1

或者,您可以使用gem'colorize'。 *注意*在Windows上,使用它时需要手动`需要'win32console`,因为'colorize'只检查'RUBY_PLATFORM =〜/ win32 /`,在某些情况下'RUBY_PLATFORM`返回`i386-mingw32`。 – 2012-09-14 23:47:59

我编写了一个小型的跨平台gem,可以在MRI和JRuby下无缝运行在Windows或POSIX系统上。

它没有依赖关系,在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