Как я могу изменить цвет текста в командной строке Windows

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

Вопрос

У меня есть программа командной строки, которая выводит ведение журнала на экран.

Я хочу, чтобы строки ошибок отображались красным цветом.Есть ли какие-то специальные коды символов, которые я могу вывести, чтобы переключить цвет текста на красный, а затем снова на белый?

Я использую ruby, но я предполагаю, что это было бы то же самое на любом другом языке.

Что -то вроде:

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

print "#{red} ERROR: IT BROKE #{white}"
print "other stuff"
Это было полезно?

Решение

Вам необходимо получить доступ к [Win32 Console API] (http://msdn.microsoft.com/en-us/library/ms682073 (ПРОТИВ 85%29.aspx).К сожалению, я не знаю, как вы могли бы сделать это с помощью Ruby.В Perl я бы использовал Win32::Консоль модуль.Консоль Windows не отвечает на экранирующие коды ANSI.

В соответствии с статья о раскрашивании выходных данных Ruby как упоминал artur02, вам нужно установить и загрузить драгоценный камень win32console.

Другие советы

В Windows вы можете легко сделать это тремя способами:

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

Также вы можете расширить строку подобным образом, чтобы получить больше цветов:

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

Пожалуйста, обратитесь к документации для term / ansicolor для получения дополнительной информации и возможного использования.

Вы можете прочитать здесь хорошую и иллюстрированную статью:http://kpumuk.info/ruby-on-rails/colorizing-console-ruby-script-output/

Я думаю, что настройка цвета текста консоли в значительной степени зависит от языка.Вот пример на C # из MSDN:

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();
}

Консоль.Цвет переднего плана является свойством для настройки цвета текста.

Вы могли бы использовать escape-последовательность 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 не записывают escape-последовательности ANSI в консоль

Они должны интерпретировать действия escape-кода и вместо этого вызывать собственный консольный API

Спасибо Microsoft :-(

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

Я создал небольшой кроссплатформенный gem, который легко справляется с этим, работая в Windows или POSIX-системах, как в MRI, так и в JRuby.

Он не имеет зависимостей и использует коды ANSI в системах POSIX, а также FFI (JRuby) или Fiddler (MRI) для Windows.

Чтобы использовать его, просто:

gem install color-console

ColorConsole предоставляет методы для вывода строк текста разных цветов с помощью консоли.функции 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 для получения более подробной информации.

Насколько я знаю, это невозможно с помощью командной строки, это всего лишь один цвет...

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

Цвета, доступные для использования с командой, представляют собой шестнадцать цветов 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

Много старых ANSI Цветовые коды работать.Код для красного переднего плана - это что-то вроде Escape-[31m.Escape - это символ 27, так что это "\ 033[31m" или "\x1B[31m", в зависимости от вашей схемы экранирования.

[39m - это код для возврата к цвету по умолчанию.

Также можно указать сразу несколько кодов для одновременной настройки цвета переднего плана и фона.

Возможно, вам придется загрузить ANSI.sys, см. эта страница.

В конечном счете вам нужно позвонить Setconsoletextатрибут.Вы можете получить дескриптор буфера экрана консоли из GetStdHandle Получить дескриптор.

Я целую вечность использую бесплатную программу Windows tail под названием baretail (google it), которая позволяет вам выполнять Windows-версию unix tail command с приложением tail.Это позволяет вам раскрашивать строки в зависимости от того, какие ключевые слова вы определяете.Что приятно в этом решении, так это то, что оно не привязано к определенному языку, настройкам и т.д., вы просто определяете свою цветовую схему и включаете ее, как donkey kong.В моем личном топ-10 бесплатных помощников!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top