如何更改windows命令提示符中的文本颜色

如何更改windows命令提示符中的文本颜色,windows,ruby,command-line,colors,Windows,Ruby,Command Line,Colors,我有一个命令行程序,它将日志输出到屏幕 我希望错误行显示为红色。我是否可以输出一些特殊字符代码,将文本颜色切换为红色,然后再切换回白色 我使用的是ruby,但我想这在任何其他语言中都是一样的 比如: red = "\0123" # character code white = "\0223" print "#{red} ERROR: IT BROKE #{white}" print "other stuff" 据我所知,这是不可能的命令行,它只是一种颜色 using System; usin

我有一个命令行程序,它将日志输出到屏幕

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

我使用的是ruby,但我想这在任何其他语言中都是一样的

比如:

red = "\0123" # character code
white = "\0223"

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#程序更改颜色,描述如何包装控制台输出以实现效果。

您需要。

许多旧的ANSI工作。红色前景的代码类似于转义-[31m]。转义是字符27,因此根据转义方案,它是“\033[31m”或“\x1B[31m”

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

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


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

您可以在这里阅读一篇很好的插图文章:

我认为设置控制台文本颜色是非常特定于语言的。下面是来自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();
}
for(int x=0;x

控制台。ForegroundColor是用于设置文本颜色的属性。

用于输出到命令行的标准C/C++规范没有指定任何更改控制台窗口颜色的功能。也就是说,Win32中有许多函数可以执行此操作

更改Win32控制台颜色的最简单方法是通过iostream.h中的system命令。此函数调用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
仅仅是这一点颜色就可以使控制台程序更加美观。但是,color命令将改变整个控制台的颜色。要控制单个单元格,我们需要使用windows.h中的函数

要执行此操作,您需要使用
SetConsoleAttribute
功能

您需要访问。不幸的是,我不知道如何从Ruby中访问。在Perl中,我将使用该模块。Windows控制台不响应ANSI转义码


根据artur02提到的,您需要安装并加载win32console gem。

最终您需要调用。您可以从中获取控制台屏幕缓冲区句柄。

您可以使用ANSI转义序列,但在现代版本的Windows下,这无法满足您的需要。Wikipedia有一篇内容丰富的文章:

因此,对于您最初的问题,答案几乎肯定是“否”。然而,您可以在不编写转义序列的情况下更改前景色,例如,通过调用Win32 API函数。我不知道如何在Ruby中完成这类操作,但似乎有人做到了:

我想你应该用4表示暗红色,12表示亮红色,7表示恢复默认颜色

希望这有帮助!

关于ANSI转义码:

32位字符模式(子系统:控制台)Windows应用程序不会将ANSI转义序列写入控制台

他们必须解释转义码操作并调用本机控制台API


感谢microsoft:-(

颜色[背景][前景]

其中颜色定义如下:

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
例如,要将背景更改为蓝色,将前景更改为灰色,请键入:


color18

我一直在使用一个名为baretail(谷歌it)的免费windows tail程序对于那些可以使用windows appified版本的unix tail命令的年代,它可以根据定义的关键字对行进行着色。作为一种解决方案,它的好处在于它不依赖于特定的语言或设置,等等,你只需定义你的配色方案和颜色。在我个人的十大免费软件帮助中!

在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
或者,如果您可以安装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

有关term/ansicolor的更多信息和可能的用法,请参阅文档。

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

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

有关更多详细信息,请访问项目主页。

ANSI转义码在Windows命令提示符下本机不可用。或者,您可以使用gem“colorize”。请注意,在Windows上,您需要手动
要求使用“win32console
,因为“colorize”仅在RUBY_PLATFORM=~/win32/
的情况下检查
,在某些情况下检查
Y_PLATFORM
返回
i386-mingw32
。我认为您缺少一个
结尾
用于cygwin:alias color='cmd/c color'