如何在Windows命令提示符下更改文本颜色
我有一个命令行程序,该程序将日志记录输出到屏幕上。
我希望错误行显示为红色。我可以输出一些特殊的字符代码来将文本颜色切换为红色,然后再切换回白色吗?
我正在使用ruby,但我想这在任何其他语言中都一样。
就像是:
red = "23" # character code white = "23" print "#{red} ERROR: IT BROKE #{white}" print "other stuff"
解决方案
回答
据我所知,使用命令行是不可能的,它只是一种颜色...
回答
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转义码。
回答
许多旧的ANSI颜色代码都可以使用。红色前景的代码类似于Escape- [31m。转义符是字符27,根据转义方案,它是" \ 033 [31m"或者" \ x1B [31m""。
[39m是返回默认颜色的代码。
也可以一次指定多个代码以同时设置前景色和背景色。
我们可能必须加载ANSI.sys,请参阅此页面。
回答
我们可以在此处阅读精美的插图文章:
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命令。要更改颜色,我们将使用它来调用color命令。例如," system(" Color F1");`将使控制台变成白色的深蓝色。
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
只需一点点颜色,即可使控制台程序在视觉上更令人愉悦。但是,"颜色"命令将更改整个控制台的颜色。要控制单个单元,我们需要使用windows.h中的函数。
为此,我们需要使用SetConsoleAttribute
函数
http://msdn.microsoft.com/zh-CN/library/ms686047.aspx
回答
我们需要访问[Win32控制台API](http://msdn.microsoft.com/zh-cn/library/ms682073(VS.85%29.aspx)。不幸的是,我不知道我们会怎么做这是从Ruby中获得的。在Perl中,我将使用Win32 :: Console模块。Windows控制台不会响应ANSI转义码。
根据artur02提到的有关为Ruby输出着色的文章,我们需要安装并加载win32console gem。
回答
最终,我们需要调用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-bit character-mode (subsystem:console) Windows applications don't write ANSI escape sequences to the console They must interpret the escape code actions and call the native Console API instead
谢谢微软:-(
回答
颜色[背景] [前景]
颜色定义如下:
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
例如,要将背景更改为蓝色,将前景更改为灰色,请输入:
颜色18
回答
我一直在使用免费软件的Windows tail程序,该程序称为裸尾(google it)很久了,它可以让我们执行Windows应用版本的unix tail命令。它使我们可以根据定义的任何关键字为行着色。作为解决方案的好处是,它与特定的语言或者设置等无关,我们只需定义配色方案及其类似驴金刚。在我个人的十大免费软件助手中!
回答
在Windows上,我们可以通过以下三种方式轻松完成此操作:
require 'win32console' puts "\e[31mHello, World!\e[0m"
现在,我们可以使用名为red
的小型方法扩展String
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
或者,如果我们可以安装gems:
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
有关更多信息和可能的用法,请参阅文档以了解术语/杂色。