Sé que el color bf
comando establece los colores de toda la ventana de la línea de comando, pero quería imprimir una sola línea en un color diferente.
Sé que el color bf
comando establece los colores de toda la ventana de la línea de comando, pero quería imprimir una sola línea en un color diferente.
Respuestas:
Quería imprimir una sola línea en un color diferente.
Use secuencias de escape ANSI.
Windows antes de 10: no hay soporte nativo para colores ANSI en la consola
Para la versión de Windows inferior a 10, la consola de comandos de Windows no admite el color de salida de forma predeterminada. Puede instalar Cmder , ConEmu , ANSICON o Mintty (usado por defecto en GitBash y Cygwin) para agregar soporte de color a su consola de comandos de Windows.
Windows 10 - Colores de línea de comando
A partir de Windows 10, la consola de Windows admite secuencias de escape ANSI y algunos colores de forma predeterminada. La función se envió con la actualización del umbral 2 en noviembre de 2015.
Actualización (05-2019): ColorTool le permite cambiar la combinación de colores de la consola. Es parte del proyecto Microsoft Terminal .
Manifestación
Comando por lotes
El win10colors.cmd
fue 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
o .bat
- ambos deberían funcionar. Pero creo que sé por qué no funciona: parece que el símbolo de escape se elimina al publicar en StackOverflow. No copie el contenido de mi respuesta, use el contenido de aquí en su lugar: gist.githubusercontent.com/mlocati/…
ESC
Notepad ++ antes ... Puede hacer esto con códigos ALT usando el teclado numérico y la tecla ALT izquierda: L-ALT
+ 0
+ 2
+7
ESC
personaje en un archivo Batch de esta manera:for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
Este es un auto compilado híbrido bat / .net (debe guardarse como .BAT
) que se puede usar en cualquier sistema que tenga instalado .net framework (es raro ver una ventana sin .NET framework incluso para el XP / 2003 más antiguo instalaciones). Utiliza el compilador jscript.net para crear un exe capaz de imprimir cadenas con diferentes colores de fondo / primer plano solo para la línea actual.
@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;
Aquí está el mensaje de ayuda:
Ejemplo :
coloroutput.bat -s "aa\nbb\n\u0025cc" -b 10 -f 3 -n -e
También puedes encontrar este script aquí .
También puede consultar la función de color de carlos -> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453
Esta no es una gran respuesta, pero si sabe que la estación de trabajo de destino tiene Powershell, puede hacer algo como esto (suponiendo un script BAT / CMD):
CALL:ECHORED "Print me in red!"
:ECHORED
%Windir%\System32\WindowsPowerShell\v1.0\Powershell.exe write-host -foregroundcolor Red %1
goto:eof
Es una respuesta antigua pero pensé que aclararía y simplificaría un poco
PowerShell ahora se incluye en todas las versiones de Windows desde 7. Por lo tanto, la sintaxis de esta respuesta se puede acortar a una forma más simple:
-fore
lugar de-foregroundcolor
-back
lugar de-backgroundcolor
echo
powershell write-host -fore Cyan This is Cyan text
powershell write-host -back Red This is Red background
La lista completa de colores y más información está disponible en
- Documentación de PowerShell paraWrite-Host
Windows 10 - TH2 y superior:
(también conocida como Versión 1511, compilación 10586, versión 2015-11-10)
En el símbolo del sistema:
echo ^[[32m HI ^[[0m
Usando las teclas reales: echo Ctrl+ [[32m HI
Ctrl+[[0m
Enter
Debería ver un "HI" verde debajo de él.
Los números de código se pueden encontrar aquí:
Bloc:
Para guardar esto en el bloc de notas, puede escribir ESC usando: Alt+ 027
con el teclado numérico, luego la [32m
parte. Otro truco cuando estaba en una computadora portátil, redirige la línea de arriba a un archivo para comenzar, luego corta y pega:
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
\033
pero no ... ¿cómo podría hacer esto en Java?
Simplemente puede crear archivos con el nombre de la palabra para imprimir, usar findtr que puede imprimir en color y luego borrar el archivo. Prueba este ejemplo:
@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
correr color /?
para obtener una lista de colores.
Puede usar ANSICON para habilitar códigos de terminal ANSI en versiones anteriores de Windows. Hay versiones de 32 y 64 bits que he usado en Windows XP y Windows 7.
También me molestó la falta de coloración adecuada en cmd, así que seguí adelante y creé cmdcolor . Es solo un proxy estándar, que busca un conjunto limitado de secuencias de control ANSI / VT100 (en otras palabras, como en bash), es decirecho \033[31m RED \033[0m DEFAULT | cmdcolor.exe
.
cmdcolor.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit
upx
. ¿Podría contactarme por correo electrónico, por favor?
Miré esto porque quería introducir algunos colores de texto simples a un archivo Win7 Batch. Esto es lo que se me ocurrió. Gracias por tu ayuda.
@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
Ya hay una respuesta aceptada con más de 250 votos a favor. La razón por la que sigo contribuyendo es que elescape
carácter requerido para hacer eco no es aceptado por muchos editores (estoy usando, por ejemplo, MS Code) y todas las demás soluciones requieren algunas piezas de software de terceros (que no son Windows por defecto).
La solución alternativa con el uso de comandos por lotes simples se está utilizando en PROMPT
lugar de ECHO
. El PROMPT
comando acepta el escape
carácter de una manera amigable para cualquier editor como una $E
secuencia de caracteres. (Simplemente reemplace el Esc
en los códigos de escape ASCII ) con $E
.
Aquí hay un código de demostración:
@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: El único inconveniente es que esta técnica colisiona con la configuración de color cmd del usuario (color
comando o configuración) si no se conoce explícitamente.
- Espero que esto ayude, ya que esta es la única solución aceptable para mí por las razones mencionadas al principio. -
EDITAR:
Según los comentarios, adjunto otro fragmento inspirado en @Jeb. Eso:
ECHO
comandos "nativos"PROMPT
valor .ECHO
resultado inevitablemente afecta el PROMPT
color, por lo que el color debe restablecerse, de todos modos@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 en batcolors / echo.bat "?
set ASCII27=←
con for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ASCII27=%%E"
. Esto utiliza el carácter de escape creado por el comando de solicitud, sin cambiar la solicitud de forma permanente (porque el prompt
comando se ejecuta en un proceso secundario). Por cierto. Su echos.bat
tiene un potencial de optimización ...
Estoy agregando una respuesta para abordar un problema señalado en algunos comentarios anteriores: que los códigos de color ansi en línea pueden comportarse mal cuando están dentro de un bucle FOR (en realidad, dentro de cualquier bloque de código entre paréntesis). El siguiente código .bat demuestra (1) el uso de códigos de color en línea, (2) la falla de color que puede ocurrir cuando los códigos de color en línea se usan en un bucle FOR o dentro de un bloque de código entre paréntesis, y (3) una solución para el problema. Cuando se ejecuta el código .bat, las pruebas 2 y 3 demuestran la falla del código de color, y la prueba 4 no muestra ninguna falla porque implementa la solución.
[EDITAR 2020-04-07: Encontré otra solución que presumiblemente es más eficiente que llamar a una subrutina. Encierre la frase FINDSTR entre paréntesis, como en la siguiente línea:
echo success | (findstr /R success)
ENDEDIT]
Nota: En mi experiencia (limitada), el problema del código de color se manifiesta solo después de que la entrada se canaliza a FINDSTR dentro del bloque de código. Así es como el siguiente .bat reproduce el problema. Es posible que el problema del código de color sea más general que después de conectarlo a FINDSTR. Si alguien puede explicar la naturaleza del problema, y si hay una mejor manera de resolverlo, lo agradecería.
@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
podrías usar cecho ... también puedes usarlo para incrustarlo directamente en tu script para que no tengas que llevar un .com o .exe
http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
Acabo de convertir de Win 7 Home a Win 10 Pro y quería reemplazar el lote que llamo de otros lotes para hacer eco de la información en color. Al revisar lo que se discutió anteriormente, uso lo siguiente que reemplazará directamente a mi lote anterior. NOTA la adición de "~" al mensaje para que se puedan usar mensajes con espacios. En lugar de recordar códigos, uso letras para los colores que necesitaba.
Si% 2 contiene espacios requiere "..."% 1 Colores fuertes en negro: R = Rojo G = VERDE Y = AMARILLO W = BLANCO
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
Tendrá que repetir una secuencia de código de escape ANSI para alterar el color del texto: http://en.wikipedia.org/wiki/ANSI_escape_code
Otra muy buena fuente de estos códigos de escape es http://ascii-table.com/ansi-escape-sequences.php
Ponga las siguientes líneas en un archivo llamado ColourText.bas
en su escritorio.
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
Guárdelo y escriba lo siguiente en un símbolo del sistema.
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /target:exe /out:"%userprofile%\desktop\ColourText.exe" "%userprofile%\desktop\ColourText.bas" /verbose
Un archivo llamado ColourText.exe aparecerá en su escritorio. Muévalo a la carpeta de Windows .
Para usar debe usar dos códigos de caracteres para establecer el color, por ejemplo, 01
no 1
.
ColourText ColourOfText ColourOfTextWhenFinished Text
Por ejemplo, establecer azul sobre blanco sin pasar ningún texto, luego rojo sobre blanco, terminando con azul sobre gris.
ColourText F1 F1
ColourText F2 71 This is green on white
o
ColourText F1 F1
cls
ColourText F4 F4
Echo Hello
Echo Hello today
ColourText F1 F1
También el CLS
comando se vuelve interesante. Color
El comando sin parámetros restablece todos los colores a los colores de inicio.
Para obtener el código de color, agregue los siguientes números. Utilice la calculadora en modo programadores. Estos son números hexadecimales. Se pueden agregar juntos, por ejemplo, Rojo + Azul + FG Intensidad = 13 = D. Como no se utilizó 10+, el fondo será negro. Los códigos de color DEBEN tener dos caracteres, por ejemplo, 08
no 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 que esto funcione en Windows 10, puede activar esta bandera: ENABLE_VIRTUAL_TERMINAL_PROCESSING
.
Con esta clave de registro puede configurar esto de manera predeterminada
[HKCU\Console] VirtualTerminalLevel dword 0x1
Como Glenn Slayden dijo en esta respuesta , puede agregar al registro el valor adecuado para hacer que el cmd sea "más colorido".
Afortunadamente, el valor predeterminado global se puede cambiar de habilitar a inhabilitar. La clave de registro en HKEY_CURRENT_USER \ Console \ VirtualTerminalLevel establece el comportamiento predeterminado global para procesar secuencias de escape ANSI. Cree una clave DWORD (si es necesario) y establezca su valor en 1 para habilitar globalmente (o 0 para deshabilitar`) el procesamiento ANSI de forma predeterminada.
Establecer color en las declaraciones de registro en powershell no es un gran amigo.
Puedes usar el -ForegroundColor
parámetro.
Para escribir un mensaje de confirmación.
Write-Host "Process executed Successfully...." -ForegroundColor Magenta
Para escribir un mensaje de error.
Write-Host "Sorry an unexpected error occurred.." -ForegroundColor Red
Para escribir un mensaje de progreso .
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á vacío, por lo que esto no funcionará. echo !white!
establece el color en blanco. Para volver a los colores predeterminados (cualesquiera que sean las configuraciones de usuario para eso): el color
comando sin parámetros hace eso.
Solíamos hacer esto con los códigos de terminal ANSI . No estoy seguro si todavía funcionan, pero puedes probarlos.
Puede usar el comando de color para cambiar el color de toda la consola
Color 0F
Es blanco y negro
Color 0A
Es negro y verde