Eu sei que o color bf
comando define as cores de toda a janela da linha de comando, mas eu queria imprimir uma única linha em uma cor diferente.
Eu sei que o color bf
comando define as cores de toda a janela da linha de comando, mas eu queria imprimir uma única linha em uma cor diferente.
Respostas:
Eu queria imprimir uma única linha em uma cor diferente.
Use seqüências de escape ANSI.
Windows anterior a 10 - sem suporte nativo para cores ANSI no console
Para a versão do Windows abaixo de 10, o console de comando do Windows não suporta a coloração de saída por padrão. Você pode instalar o Cmder , ConEmu , ANSICON ou Mintty (usado por padrão no GitBash e Cygwin) para adicionar suporte a cores no console de comando do Windows.
Windows 10 - Cores da linha de comando
A partir do Windows 10, o console do Windows suporta sequências de escape ANSI e algumas cores por padrão. O recurso enviado com a atualização do limite 2 em novembro de 2015.
Atualização (05-2019): O ColorTool permite alterar o esquema de cores do console. Faz parte do projeto Microsoft Terminal .
Demo
Comando em lote
O win10colors.cmd
foi escrito por Michele Locati :
@echo off
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.
echo [101;93m NORMAL FOREGROUND COLORS [0m
echo ^<ESC^>[30m [30mBlack[0m (black)
echo ^<ESC^>[31m [31mRed[0m
echo ^<ESC^>[32m [32mGreen[0m
echo ^<ESC^>[33m [33mYellow[0m
echo ^<ESC^>[34m [34mBlue[0m
echo ^<ESC^>[35m [35mMagenta[0m
echo ^<ESC^>[36m [36mCyan[0m
echo ^<ESC^>[37m [37mWhite[0m
echo.
echo [101;93m NORMAL BACKGROUND COLORS [0m
echo ^<ESC^>[40m [40mBlack[0m
echo ^<ESC^>[41m [41mRed[0m
echo ^<ESC^>[42m [42mGreen[0m
echo ^<ESC^>[43m [43mYellow[0m
echo ^<ESC^>[44m [44mBlue[0m
echo ^<ESC^>[45m [45mMagenta[0m
echo ^<ESC^>[46m [46mCyan[0m
echo ^<ESC^>[47m [47mWhite[0m (white)
echo.
echo [101;93m STRONG FOREGROUND COLORS [0m
echo ^<ESC^>[90m [90mWhite[0m
echo ^<ESC^>[91m [91mRed[0m
echo ^<ESC^>[92m [92mGreen[0m
echo ^<ESC^>[93m [93mYellow[0m
echo ^<ESC^>[94m [94mBlue[0m
echo ^<ESC^>[95m [95mMagenta[0m
echo ^<ESC^>[96m [96mCyan[0m
echo ^<ESC^>[97m [97mWhite[0m
echo.
echo [101;93m STRONG BACKGROUND COLORS [0m
echo ^<ESC^>[100m [100mBlack[0m
echo ^<ESC^>[101m [101mRed[0m
echo ^<ESC^>[102m [102mGreen[0m
echo ^<ESC^>[103m [103mYellow[0m
echo ^<ESC^>[104m [104mBlue[0m
echo ^<ESC^>[105m [105mMagenta[0m
echo ^<ESC^>[106m [106mCyan[0m
echo ^<ESC^>[107m [107mWhite[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^<ESC^>[31m [31mred foreground color[0m
echo ^<ESC^>[7m [7minverse foreground ^<-^> background[0m
echo ^<ESC^>[7;31m [7;31minverse red foreground color[0m
echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m
echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m
.cmd
ou .bat
- ambos devem funcionar. Mas acho que sei por que não funciona: parece que o símbolo de escape é removido ao postar no StackOverflow. Por favor, não copie o conteúdo da minha resposta, use o conteúdo daqui: gist.githubusercontent.com/mlocati/…
ESC
no bloco de notas ++ antes ... Você pode fazer isso com Alt-códigos usando o teclado numérico e a tecla ALT esquerda: L-ALT
+ 0
+ 2
+7
ESC
personagem em um arquivo de lote da seguinte forma:for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
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 uma janela sem o .NET framework, mesmo para o XP / 2003 mais antigo instalações). Ele usa o compilador jscript.net para criar um exe capaz de imprimir seqüências de caracteres com cores diferentes de plano 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;
Aqui está a mensagem de ajuda:
Exemplo :
coloroutput.bat -s "aa\nbb\n\u0025cc" -b 10 -f 3 -n -e
Você também pode encontrar esse script aqui .
Você também pode verificar a função de cor de carlos -> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453
Essa não é uma ótima resposta, mas se você sabe que a estação de trabalho de destino possui o Powershell, 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
É uma resposta antiga, mas pensei em esclarecer e simplificar um pouco
O PowerShell agora está incluído em todas as versões do Windows desde 7. Portanto, a sintaxe desta resposta pode ser reduzida para uma forma mais simples:
-fore
vez de-foregroundcolor
-back
vez de-backgroundcolor
echo
powershell write-host -fore Cyan This is Cyan text
powershell write-host -back Red This is Red background
A lista completa de cores e mais informações está disponível em
- Documentação do PowerShell paraWrite-Host
Windows 10 - TH2 e superior:
(aka Versão 1511, build 10586, versão 10/11/2015)
No prompt de comando:
echo ^[[32m HI ^[[0m
Usando as teclas reais: eco Ctrl+ [[32m HI
Ctrl+[[0m
Enter
Você deve ver um "HI" verde abaixo dele.
Os números de código podem ser encontrados aqui:
Bloco de anotações:
Para salvar isso no bloco de notas, você pode digitar ESC usando: Alt+ 027
com o teclado numérico e depois a [32m
parte. Outro truque, quando eu estava em um laptop, redirecione a linha acima para um arquivo para começar e, em seguida, recorte e cole:
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
\033
mas não ... como eu poderia fazer isso em Java?
Você pode apenas criar arquivos com o nome da palavra a imprimir, usar findstr que pode imprimir em cores e depois apagar 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
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof
Corra color /?
para obter uma lista de cores.
Você pode usar o ANSICON para ativar os códigos de terminal ANSI nas versões mais antigas do Windows. Existem versões de 32 e 64 bits que usei no Windows XP e Windows 7.
Também fiquei irritado com a falta de cores adequadas no cmd, então fui em frente e criei o cmdcolor . É apenas um proxy stdout, que procura um conjunto limitado de seqüências de controle ANSI / VT100 (em outras palavras, como no bash), ie echo \033[31m RED \033[0m DEFAULT | cmdcolor.exe
.
cmdcolor.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit
upx
. Você poderia entrar em contato comigo por e-mail, por favor?
Eu olhei para isso porque queria introduzir algumas cores de texto simples em um arquivo em lote do Win7. Isto é o que eu vim com. 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.
<nul set /p="("
call :PainText 09 "BLUE is cold" && <nul set /p=") ("
call :PainText 02 "GREEN is earth" && <nul set /p=") ("
call :PainText F0 "BLACK is night" && <nul set /p=")"
echo.
<nul set /p="("
call :PainText 04 "RED is blood" && <nul set /p=") ("
call :PainText 0e "YELLOW is pee" && <nul set /p=") ("
call :PainText 0F "WHITE all colors"&& <nul set /p=")"
goto :end
:PainText
<nul set /p "=%DEL%" > "%~2"
findstr /v /a:%1 /R "+" "%~2" nul
del "%~2" > nul
goto :eof
:end
echo.
pause
Já existe uma resposta aceita com mais de 250 votos positivos. A razão pela qual ainda estou contribuindo é que o escape
caractere necessário para ecoar não é aceito por muitos editores (estou usando, por exemplo, MS Code) e todas as outras soluções exigem alguns softwares de terceiros (que não sejam padrão do Windows).
A solução alternativa usando apenas comandos simples de lote está usando em PROMPT
vez de ECHO
. O PROMPT
comando aceita o escape
caractere de maneira amigável a qualquer editor como uma $E
sequência de caracteres. (Basta substituir a Esc
nos códigos ASCII de escape ) com $E
.
Aqui está um código de demonstração:
@ECHO OFF
:: Do not pollute environment with the %prompt.bak% variable
:: ! forgetting ENDLOCAL at the end of the batch leads to prompt corruption
SETLOCAL
:: Old prompt settings backup
SET prompt.bak=%PROMPT%
:: Entering the "ECHO"-like section
:: Forcing prompt to display after every command (see below)
ECHO ON
:: Setting the prompt using the ANSI Escape sequence(s)
:: - Always start with $E[1A, otherwise the text would appear on a next line
:: - Then the decorated text follows
:: - And it all ends with $E30;40m, which makes the following command invisible
:: - assuming default background color of the screen
@ PROMPT $E[1A$E[30;42mHELLO$E[30;40m
:: An "empty" command that forces the prompt to display.
:: The word "rem" is displayed along with the prompt text but is made invisible
rem
:: Just another text to display
@ PROMPT $E[1A$E[33;41mWORLD$E[30;40m
rem
:: Leaving the "ECHO"-like section
@ECHO OFF
:: Or a more readable version utilizing the cursor manipulation ASCII ESC sequences
:: the initial sequence
PROMPT $E[1A
:: formating commands
PROMPT %PROMPT%$E[32;44m
:: the text
PROMPT %PROMPT%This is an "ECHO"ed text...
:: new line; 2000 is to move to the left "a lot"
PROMPT %PROMPT%$E[1B$E[2000D
:: formating commands fro the next line
PROMPT %PROMPT%$E[33;47m
:: the text (new line)
PROMPT %PROMPT%...spreading over two lines
:: the closing sequence
PROMPT %PROMPT%$E[30;40m
:: Looks like this without the intermediate comments:
:: PROMPT $E[1A
:: PROMPT %PROMPT%$E[32;44m
:: PROMPT %PROMPT%This is an "ECHO"ed text...
:: PROMPT %PROMPT%$E[1B$E[2000D
:: PROMPT %PROMPT%$E[33;47m
:: PROMPT %PROMPT%...spreading over two lines
:: PROMPT %PROMPT%$E[30;40m
:: show it all at once!
ECHO ON
rem
@ECHO OFF
:: End of "ECHO"-ing
:: Setting prompt back to its original value
:: - We prepend the settings with $E[37;40m in case
:: the original prompt settings do not specify color
:: (as they don't by default).
:: - If they do, the $E[37;40m will become overridden, anyway.
:: ! It is important to write this command
:: as it is with `ENDLOCAL` and in the `&` form.
ENDLOCAL & PROMPT $E[37;40m%prompt.bak%
EXIT /B 0
NOTA: A única desvantagem é que essa técnica colide com as configurações de cores do cmd do usuário ( color
comando ou configurações) se não for conhecido explicitamente.
- Espero que isso ajude, pois esta é a única solução aceitável para mim pelas razões mencionadas no início. -
EDITAR:
Com base nos comentários, estou anexando outro trecho inspirado em @Jeb. Isto:
ECHO
comando "nativo"PROMPT
valor localECHO
saída afeta inevitavelmente a PROMPT
cor e, portanto, ela deve ser redefinida@ECHO OFF
:: ! To observe color effects on prompt below in this script
:: run the script from a fresh cmd window with no custom
:: prompt settings
:: Only not to pollute the environment with the %\e% variable (see below)
:: Not needed because of the `PROMPT` variable
SETLOCAL
:: Parsing the `escape` character (ASCII 27) to a %\e% variable
:: Use %\e% in place of `Esc` in the [http://ascii-table.com/ansi-escape-sequences.php]
FOR /F "delims=#" %%E IN ('"prompt #$E# & FOR %%E IN (1) DO rem"') DO SET "\e=%%E"
:: Demonstrate that prompt did not get corrupted by the previous FOR
ECHO ON
rem : After for
@ECHO OFF
:: Some fancy ASCII ESC staff
ECHO [ ]
FOR /L %%G IN (1,1,10) DO (
TIMEOUT /T 1 > NUL
ECHO %\e%[1A%\e%[%%GC%\e%[31;43m.
ECHO %\e%[1A%\e%[11C%\e%[37;40m]
)
:: ECHO another decorated text
:: - notice the `%\e%[30C` cursor positioning sequence
:: for the sake of the "After ECHO" test below
ECHO %\e%[1A%\e%[13C%\e%[32;47mHELLO WORLD%\e%[30C
:: Demonstrate that prompt did not get corrupted by ECHOing
:: neither does the cursor positioning take effect.
:: ! But the color settings do.
ECHO ON
rem : After ECHO
@ECHO OFF
ENDLOCAL
:: Demonstrate that color settings do not reset
:: even when out of the SETLOCAL scope
ECHO ON
rem : After ENDLOCAL
@ECHO OFF
:: Reset the `PROMPT` color
:: - `PROMPT` itself is untouched so we did not need to backup it.
:: - Still ECHOING in color apparently collide with user color cmd settings (if any).
:: ! Resetting `PROMPT` color this way extends the `PROMPT`
:: by the initial `$E[37;40m` sequence every time the script runs.
:: - Better solution then would be to end every (or last) `ECHO` command
:: with the `%\e%[37;40m` sequence and avoid setting `PROMPT` altogether.
:: which makes this technique preferable to the previous one (before EDIT)
:: - I am keeping it this way only to be able to
:: demonstrate the `ECHO` color effects on the `PROMPT` above.
PROMPT $E[37;40m%PROMPT%
ECHO ON
rem : After PROMPT color reset
@ECHO OFF
EXIT /B 0
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "\e=%%E"
echo
usado em batcolors / echo.bat "?
set ASCII27=←
por for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ASCII27=%%E"
. Isso usa o caractere de escape criado pelo comando prompt, sem alterar o prompt permanentemente (porque o prompt
comando é executado em um processo filho). Btw. O seu echos.bat
tem algum potencial de otimização ...
Estou adicionando uma resposta para resolver um problema observado em alguns comentários acima: que os códigos de cores ansi em linha podem se comportar mal quando dentro de um loop FOR (na verdade, dentro de qualquer bloco de código entre parênteses). O código .bat abaixo demonstra (1) o uso de códigos de cores embutidos, (2) a falha de cores que pode ocorrer quando códigos de cores embutidos são usados em um loop FOR ou dentro de um bloco de código entre parênteses, e (3) uma solução para o problema. Quando o código .bat é executado, os testes 2 e 3 demonstram a falha do código de cores e o teste 4 não mostra falhas porque implementa a solução.
[EDIT 2020-04-07: Encontrei outra solução presumivelmente mais eficiente do que chamar uma sub-rotina. Coloque a frase FINDSTR entre parênteses, como na seguinte linha:
echo success | (findstr /R success)
ENDEDIT]
Nota: Na minha experiência (limitada), o problema do código de cores se manifesta somente depois que a entrada é canalizada para FINDSTR dentro do bloco de código. É assim que o seguinte .bat reproduz o problema. É possível que o problema do código de cores seja mais geral do que após a tubulação para o FINDSTR. Se alguém puder explicar a natureza do problema e se houver uma maneira melhor de resolvê-lo, eu agradeceria.
@goto :main
:resetANSI
EXIT /B
rem The resetANSI subroutine is used to fix the colorcode
rem bug, even though it appears to do nothing.
:main
@echo off
setlocal EnableDelayedExpansion
rem Define some useful colorcode vars:
for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ESCchar=%%E"
set "green=%ESCchar%[92m"
set "yellow=%ESCchar%[93m"
set "magenta=%ESCchar%[95m"
set "cyan=%ESCchar%[96m"
set "white=%ESCchar%[97m"
set "black=%ESCchar%[30m"
echo %white%Test 1 is NOT in a FOR loop nor within parentheses, and color works right.
echo %yellow%[Test 1] %green%This is Green, %magenta%this is Magenta, and %yellow%this is Yellow.
echo %Next, the string 'success' will be piped to FINDSTR...
echo success | findstr /R success
echo %magenta%This is magenta and FINDSTR found and displayed 'success'.%yellow%
echo %green%This is green.
echo %cyan%Test 1 completed.
echo %white%Test 2 is within parentheses, and color stops working after the pipe to FINDSTR.
( echo %yellow%[Test 2] %green%This is Green, %magenta%this is Magenta, and %yellow%this is Yellow.
echo %Next, the string 'success' will be piped to FINDSTR...
echo success | findstr /R success
echo %magenta%This is supposed to be magenta and FINDSTR found and displayed 'success'.
echo %green%This is supposed to be green.
)
echo %cyan%Test 2 completed.
echo %white%Test 3 is within a FOR loop, and color stops working after the pipe to FINDSTR.
for /L %%G in (3,1,3) do (
echo %yellow%[Test %%G] %green%This is Green, %magenta%this is Magenta, and %yellow%this is Yellow.
echo %Next, the string 'success' will be piped to FINDSTR...
echo success | findstr /R success
echo %magenta%This is supposed to be magenta and FINDSTR found and displayed 'success'.
echo %green%This is supposed to be green.
)
echo %cyan%Test 3 completed.
echo %white%Test 4 is in a FOR loop but color works right because subroutine :resetANSI is
echo called after the pipe to FINDSTR, before the next color code is used.
for /L %%G in (4,1,4) do (
echo %yellow%[Test %%G] %green%This is Green, %magenta%this is Magenta, and %yellow%this is Yellow.
echo %Next, the string 'success' will be piped to FINDSTR...
echo success | findstr /R success
call :resetANSI
echo %magenta%This is magenta and FINDSTR found and displayed 'success'.
echo %green%This is green.
)
echo %cyan%Test 4 completed.%white%
EXIT /B
você pode usar o cecho .. você também pode usá-lo para incorporar diretamente no seu script, para que você não precise carregar um .com ou .exe
http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
Acabei de converter do Win 7 Home para o Win 10 Pro e queria substituir o lote que chamo de outros lotes para fazer eco das informações em cores. Revendo o que foi discutido acima, uso o seguinte, que substituirá diretamente meu lote anterior. NOTA a adição de "~" à mensagem para que as mensagens com espaços possam ser usadas. Em vez de me lembrar dos códigos, uso letras para as cores necessárias.
Se% 2 contiver espaços, é necessário "..."% 1 Cores fortes em preto: R = Vermelho G = VERDE Y = AMARELO W = BRANCO
ECHO OFF
IF "%1"=="R" ECHO ^[91m%~2[0m
IF "%1"=="G" ECHO ^[92m%~2[0m
IF "%1"=="Y" ECHO ^[93m%~2[0m
IF "%1"=="W" ECHO ^[97m%~2[0m
Você precisará repetir uma sequê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
Coloque as seguintes linhas em um arquivo chamado ColourText.bas
na á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-o 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
Para definir azul no branco, não passando nenhum texto, depois vermelho no 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
Também o CLS
comando se torna interessante. Color
O comando sem parâmetros redefine todas as cores para as cores de inicialização.
Para obter o código de cores, adicione os seguintes números. Use a Calculadora no modo de programadores. Estes são números hexadecimais. Eles podem ser adicionados juntos, por exemplo, Vermelho + Azul + FG Intensidade = 13 = D. Como 10+ não foi usado, o fundo será preto. Os códigos de cores 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 começar este trabalho no Windows 10, você pode ativar esta bandeira: ENABLE_VIRTUAL_TERMINAL_PROCESSING
.
Com essa chave do registro, você pode definir isso por padrão
[HKCU\Console] VirtualTerminalLevel dword 0x1
Como Glenn Slayden disse nesta resposta , você pode adicionar ao registro o valor adequado para tornar o cmd "mais colorido".
Felizmente, o padrão global pode ser alterado de opt-in para opt-out. A chave do Registro em HKEY_CURRENT_USER \ Console \ VirtualTerminalLevel define o comportamento padrão global para o processamento de seqüências de escape ANSI. Crie uma chave DWORD (se necessário) e defina seu valor como 1 para ativar globalmente (ou 0 para desativar`) o processamento ANSI por padrão.
Definir cores para as instruções de log no PowerShell não é um grande negócio.
você pode usar o -ForegroundColor
parâmetro
Para escrever uma mensagem de confirmação.
Write-Host "Process executed Successfully...." -ForegroundColor Magenta
Para escrever uma mensagem de erro.
Write-Host "Sorry an unexpected error occurred.." -ForegroundColor Red
Para escrever uma mensagem de progresso .
Write-Host "Working under pocess..." -ForegroundColor Green
call :color_echo "blue" "blue txt"
call :color_echo "red" "red txt"
echo "white txt"
REM : https://www.robvanderwoude.com/ansi.php
:color_echo
@echo off
set "color=%~1"
set "txt=%~2"
set ESC=
set black=%ESC%[30m
set red=%ESC%[31m
set green=%ESC%[32m
set yellow=%ESC%[33m
set blue=%ESC%[34m
set magenta=%ESC%[35m
set cyan=%ESC%[36m
set white=%ESC%[37m
if "%~1" == "black" set "color=!black!"
if "%~1" == "red" set "color=!red!"
if "%~1" == "green" set "color=!green!"
if "%~1" == "yellow" set "color=!yellow!"
if "%~1" == "blue" set "color=!blue!"
if "%~1" == "magenta" set "color=!magenta!"
if "%~1" == "cyan" set "color=!cyan!"
if "%~1" == "white" set "color=!white!"
echo | set /p="!color!!txt!"
echo.
REM : return to standard white color
echo | set /p="!white!"
REM : exiting the function only
EXIT /B 0
%ESC%
está vazio, então isso não funcionará. echo !white!
define a cor para branco. Para retornar às cores padrão (quaisquer que sejam as configurações do usuário): o color
comando sem parâmetros faz isso.
Costumávamos fazer isso com códigos de terminal ANSI . Não tenho certeza se eles ainda funcionam, mas você pode experimentá-los.
Você pode usar o comando color para alterar a cor de todo o console
Color 0F
É preto e branco
Color 0A
É preto e verde