我有一個命令行程序,它將日誌記錄輸出到屏幕上。如何在Windows命令提示符下更改文本顏色
我想讓錯誤行顯示爲紅色。是否可以輸出一些特殊字符代碼將文本顏色切換爲紅色,然後將其切換回白色?
我使用紅寶石,但我想這將是相同的任何其他語言。
喜歡的東西:
red = "\0123" # character code
white = "\0223"
print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
我有一個命令行程序,它將日誌記錄輸出到屏幕上。如何在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 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
功能
最終您需要致電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
用於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更多的信息和可能的使用。
或者,您可以使用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。
ANSI轉義代碼在Windows命令提示符上本地不可用。 – 2010-09-14 11:21:03