Como ecoar com colors diferentes na linha de comando do Windows

Eu sei que o comando color bf define as colors de toda a janela da linha de comando, mas eu queria imprimir uma única linha em uma cor diferente.

Eu queria imprimir uma única linha em uma cor diferente.

Use seqüências de escape ANSI.

Windows antes de 10 – sem suporte nativo para colors ANSI no console

Para a versão do Windows abaixo de 10, o console de comando do Windows não suporta coloração de saída por padrão. Você pode instalar o Cmder , o ConEmu , o ANSICON ou o Mintty (usados ​​por padrão no GitBash e no Cygwin) para adicionar suporte de coloração ao seu console de comando do Windows.

Windows 10 – Cores da linha de comando

A partir do Windows 10, o console do Windows suporta ANSI Escape Sequences e algumas colors por padrão. O recurso enviado com a Atualização do Limite 2 em novembro de 2015.

Documentação da MSDN

Demonstração

insira a descrição da imagem aqui

Comando em lote

O win10colors.cmd foi escrito por Michele Locati :

 @echo off cls echo [101;93m STYLES [0m echo ^[0m [0mReset[0m echo ^[1m [1mBold[0m echo ^[4m [4mUnderline[0m echo ^[7m [7mInverse[0m echo. echo [101;93m NORMAL FOREGROUND COLORS [0m echo ^[30m [30mBlack[0m (black) echo ^[31m [31mRed[0m echo ^[32m [32mGreen[0m echo ^[33m [33mYellow[0m echo ^[34m [34mBlue[0m echo ^[35m [35mMagenta[0m echo ^[36m [36mCyan[0m echo ^[37m [37mWhite[0m echo. echo [101;93m NORMAL BACKGROUND COLORS [0m echo ^[40m [40mBlack[0m echo ^[41m [41mRed[0m echo ^[42m [42mGreen[0m echo ^[43m [43mYellow[0m echo ^[44m [44mBlue[0m echo ^[45m [45mMagenta[0m echo ^[46m [46mCyan[0m echo ^[47m [47mWhite[0m (white) echo. echo [101;93m STRONG FOREGROUND COLORS [0m echo ^[90m [90mWhite[0m echo ^[91m [91mRed[0m echo ^[92m [92mGreen[0m echo ^[93m [93mYellow[0m echo ^[94m [94mBlue[0m echo ^[95m [95mMagenta[0m echo ^[96m [96mCyan[0m echo ^[97m [97mWhite[0m echo. echo [101;93m STRONG BACKGROUND COLORS [0m echo ^[100m [100mBlack[0m echo ^[101m [101mRed[0m echo ^[102m [102mGreen[0m echo ^[103m [103mYellow[0m echo ^[104m [104mBlue[0m echo ^[105m [105mMagenta[0m echo ^[106m [106mCyan[0m echo ^[107m [107mWhite[0m echo. echo [101;93m COMBINATIONS [0m echo ^[31m [31mred foreground color[0m echo ^[7m [7minverse foreground ^< -^> background[0m echo ^[7;31m [7;31minverse red foreground color[0m echo ^[7m and nested ^[31m [7mbefore [31mnested[0m echo ^[31m and nested ^[7m [31mbefore [7mnested[0m 

Este é um híbrido bat / .net auto-compilado (deve ser salvo como .BAT ) que pode ser usado em qualquer sistema que tenha instalado o framework .net (é raro ver um Windows sem o .NET framework, mesmo para o XP mais antigo / 2003 instalações). Ele usa o compilador jscript.net para criar um exe capaz de imprimir strings com diferentes colors de fundo / primeiro plano apenas para a linha atual.

 @if (@X)==(@Y) @end /* JScript comment @echo off setlocal for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d /o:-n "%SystemRoot%\Microsoft.NET\Framework\*jsc.exe"') do ( set "jsc=%%v" ) if not exist "%~n0.exe" ( "%jsc%" /nologo /out:"%~n0.exe" "%~dpsfnx0" ) %~n0.exe %* endlocal & exit /b %errorlevel% */ import System; var arguments:String[] = Environment.GetCommandLineArgs(); var newLine = false; var output = ""; var foregroundColor = Console.ForegroundColor; var backgroundColor = Console.BackgroundColor; var evaluate = false; var currentBackground=Console.BackgroundColor; var currentForeground=Console.ForegroundColor; //http://stackoverflow.com/a/24294348/388389 var jsEscapes = { 'n': '\n', 'r': '\r', 't': '\t', 'f': '\f', 'v': '\v', 'b': '\b' }; function decodeJsEscape(_, hex0, hex1, octal, other) { var hex = hex0 || hex1; if (hex) { return String.fromCharCode(parseInt(hex, 16)); } if (octal) { return String.fromCharCode(parseInt(octal, 8)); } return jsEscapes[other] || other; } function decodeJsString(s) { return s.replace( // Matches an escape sequence with UTF-16 in group 1, single byte hex in group 2, // octal in group 3, and arbitrary other single-character escapes in group 4. /\\(?:u([0-9A-Fa-f]{4})|x([0-9A-Fa-f]{2})|([0-3][0-7]{0,2}|[4-7][0-7]?)|(.))/g, decodeJsEscape); } function printHelp( ) { print( arguments[0] + " -s string [-f foreground] [-b background] [-n] [-e]" ); print( " " ); print( " string String to be printed" ); print( " foreground Foreground color - a " ); print( " number between 0 and 15." ); print( " background Background color - a " ); print( " number between 0 and 15." ); print( " -n Indicates if a new line should" ); print( " be written at the end of the "); print( " string(by default - no)." ); print( " -e Evaluates special character " ); print( " sequences like \\n\\b\\r and etc "); print( "" ); print( "Colors :" ); for ( var c = 0 ; c < 16 ; c++ ) { Console.BackgroundColor = c; Console.Write( " " ); Console.BackgroundColor=currentBackground; Console.Write( "-"+c ); Console.WriteLine( "" ); } Console.BackgroundColor=currentBackground; } function errorChecker( e:Error ) { if ( e.message == "Input string was not in a correct format." ) { print( "the color parameters should be numbers between 0 and 15" ); Environment.Exit( 1 ); } else if (e.message == "Index was outside the bounds of the array.") { print( "invalid arguments" ); Environment.Exit( 2 ); } else { print ( "Error Message: " + e.message ); print ( "Error Code: " + ( e.number & 0xFFFF ) ); print ( "Error Name: " + e.name ); Environment.Exit( 666 ); } } function numberChecker( i:Int32 ){ if( i > 15 || i < 0 ) { print("the color parameters should be numbers between 0 and 15"); Environment.Exit(1); } } if ( arguments.length == 1 || arguments[1].toLowerCase() == "-help" || arguments[1].toLowerCase() == "-help" ) { printHelp(); Environment.Exit(0); } for (var arg = 1; arg <= arguments.length-1; arg++ ) { if ( arguments[arg].toLowerCase() == "-n" ) { newLine=true; } if ( arguments[arg].toLowerCase() == "-e" ) { evaluate=true; } if ( arguments[arg].toLowerCase() == "-s" ) { output=arguments[arg+1]; } if ( arguments[arg].toLowerCase() == "-b" ) { try { backgroundColor=Int32.Parse( arguments[arg+1] ); } catch(e) { errorChecker(e); } } if ( arguments[arg].toLowerCase() == "-f" ) { try { foregroundColor=Int32.Parse(arguments[arg+1]); } catch(e) { errorChecker(e); } } } Console.BackgroundColor = backgroundColor ; Console.ForegroundColor = foregroundColor ; if ( evaluate ) { output=decodeJsString(output); } if ( newLine ) { Console.WriteLine(output); } else { Console.Write(output); } Console.BackgroundColor = currentBackground; Console.ForegroundColor = currentForeground; 

Exemplo coloroutput.bat -s "aa\nbb\n\u0025cc" -b 10 -f 3 -n -e

Você também pode verificar a function das colors de carlos -> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453

Esta não é uma ótima resposta, mas se você souber que a estação de trabalho de destino tem o Powershell, você pode fazer algo assim (assumindo o script BAT / CMD):

 CALL:ECHORED "Print me in red!" :ECHORED %Windir%\System32\WindowsPowerShell\v1.0\Powershell.exe write-host -foregroundcolor Red %1 goto:eof 

Você pode apenas criar arquivos com o nome da palavra para imprimir, usar o findstr que pode imprimir em colors e, em seguida, apaga o arquivo. Tente este exemplo:

 @echo off SETLOCAL EnableDelayedExpansion for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do ( set "DEL=%%a" ) call :ColorText 0a "green" call :ColorText 0C "red" call :ColorText 0b "cyan" echo( call :ColorText 19 "blue" call :ColorText 2F "white" call :ColorText 4e "yellow" goto :eof :ColorText echo off  "%~2" findstr /v /a:%1 /R "^$" "%~2" nul del "%~2" > nul 2>&1 goto :eof 

color /? execução color /? para obter uma lista de colors.

Você pode usar o ANSICON para habilitar códigos de terminal ANSI no Windows moderno. Existem versões de 32 e 64 bits que utilizei no Windows XP e no Windows 7.

Eu estava chateado com a falta de coloração adequada no cmd também, então fui em frente e criei o cmdcolor . É apenas um proxy stdout, que procura por um conjunto limitado de seqüências de controle ANSI / VT100 (em outras palavras, como no bash), ou seja, echo \033[31m RED \033[0m DEFAULT | cmdcolor.exe echo \033[31m RED \033[0m DEFAULT | cmdcolor.exe .

Uso e downloads .

Eu olhei para isso porque queria introduzir algumas colors de texto simples em um arquivo Win7 Batch. Isso é o que eu criei. Obrigado pela ajuda.

 @echo off cls && color 08 rem .... the following line creates a [DEL] [ASCII 8] [Backspace] character to use later rem .... All this to remove [:] for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set "DEL=%%a") echo.  "%~2" findstr /v /a:%1 /R "+" "%~2" nul del "%~2" > nul goto :eof :end echo. pause 

você pode usar o cecho .. você também pode usá-lo para incorporar diretamente no seu script para que você não tenha que carregar um .com ou .exe

http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files

Você precisará ecoar uma seqüência de código de escape ANSI para alterar a cor do texto: http://en.wikipedia.org/wiki/ANSI_escape_code

Outra fonte muito boa desses códigos de escape é http://ascii-table.com/ansi-escape-sequences.php

Costumávamos fazer isso com códigos de terminal ANSI . Não tenho certeza se eles ainda funcionam, mas você poderia experimentá-los.

Coloque as seguintes linhas em um arquivo chamado ColourText.bas na sua área de trabalho.

 Imports System Imports System.IO Imports System.Runtime.InteropServices Imports Microsoft.Win32 Public Module MyApplication Public Declare Function GetStdHandle Lib "kernel32" Alias "GetStdHandle" (ByVal nStdHandle As Long) As Long Public Declare Function SetConsoleTextAttribute Lib "kernel32" Alias "SetConsoleTextAttribute" (ByVal hConsoleOutput As Long, ByVal wAttributes As Long) As Long Public Const STD_ERROR_HANDLE = -12& Public Const STD_INPUT_HANDLE = -10& Public Const STD_OUTPUT_HANDLE = -11& Sub Main() Dim hOut as Long Dim Ret as Long Dim Colour As Long Dim Colour1 As Long Dim Text As String hOut = GetStdHandle(STD_OUTPUT_HANDLE) Colour = CLng("&h" & Split(Command(), " ")(0)) Colour1 = Clng("&h" & Split(Command(), " ")(1)) Text = Mid(Command(), 7) Ret = SetConsoleTextAttribute(hOut, Colour) Console.Out.WriteLine(text) Ret = SetConsoleTextAttribute(hOut, Colour1) End Sub End Module 

Salve e digite o seguinte em um prompt de comando.

 "C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /target:exe /out:"%userprofile%\desktop\ColourText.exe" "%userprofile%\desktop\ColourText.bas" /verbose 

Um arquivo chamado ColourText.exe aparecerá na sua área de trabalho. Mova-o para a pasta do Windows .

Para usar você deve usar dois códigos de caracteres para definir a cor, por exemplo, 01 não 1 .

 ColourText ColourOfText ColourOfTextWhenFinished Text 

POR Para definir azul no branco, não passando nenhum texto, depois vermelho no texto branco, terminando com azul no cinza.

 ColourText F1 F1 ColourText F2 71 This is green on white 

ou

 ColourText F1 F1 cls ColourText F4 F4 Echo Hello Echo Hello today ColourText F1 F1 

Além disso, o comando CLS se torna interessante. Comando de Color sem parâmetros redefine todas as colors para as colors de boot.

Para obter o código de colors, adicione os números a seguir juntos. Use a Calculadora no modo programadores. Estes são números hexadecimais. Eles podem ser adicionados juntos, por exemplo, Red + Blue + FG Intensity = 13 = D. Como 10+ não foi usado, o fundo será preto. Os códigos de colors devem ter dois caracteres, por exemplo, 08 não 8 .

 FOREGROUND_RED = &H4 ' text color contains red. FOREGROUND_INTENSITY = &H8 ' text color is intensified. FOREGROUND_GREEN = &H2 ' text color contains green. FOREGROUND_BLUE = &H1 ' text color contains blue. BACKGROUND_BLUE = &H10 ' background color contains blue. BACKGROUND_GREEN = &H20 ' background color contains green. BACKGROUND_INTENSITY = &H80 ' background color is intensified. BACKGROUND_RED = &H40 ' background color contains red. 

Para fazer isso funcionar no Windows 10, você pode ativar esse sinalizador: ENABLE_VIRTUAL_TERMINAL_PROCESSING .

Com essa chave do registro, você pode definir isso por padrão

[HKCU\Console] VirtualTerminalLevel dword 0x1

Use o comando color. Fácil e construído dentro

 Color 0F 

É preto e branco

 Color 0A 

É preto e verde