linea - Cómo hacer eco con diferentes colores en la línea de comando de Windows
variable path windows 10 (13)
Quería imprimir una sola línea en un color diferente.
Usa secuencias de escape ANSI.
Windows antes de 10: no hay soporte nativo para colores ANSI en la consola
Para la versión de Windows por debajo de 10, la consola de comandos de Windows no admite colores de salida por defecto. Puede instalar Cmder , ConEmu , ANSICON o Mintty (usado por defecto en GitBash y Cygwin) para agregar soporte para colorear 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 ANSI Escape Secuencias y algunos colores de forma predeterminada. La función enviada con la actualización del umbral 2 en noviembre de 2015.
Manifestación
Comando por lotes
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
Sé que el comando color bf
establece los colores de toda la ventana de línea de comandos, pero quería imprimir una sola línea en un color diferente.
Coloque 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 el 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. Moverlo 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
EG Para establecer azul sobre blanco al no pasar ningún texto, luego rojo sobre texto 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 comando CLS
vuelve interesante. Color
comando de Color
sin parámetros restablece todos los colores a los colores de inicio.
Para obtener el código de color, agregue los siguientes números juntos. Usa la calculadora en el modo de programadores. Estos son números hexadecimales. Se pueden agregar juntos, por ejemplo, Rojo + Azul + Intensidad FG = 13 = D. Como no se usó 10+, el fondo será negro. Los códigos de color DEBEN ser dos caracteres, por ej. 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.
Esta no es una gran respuesta, pero si sabes que la estación de trabajo de destino tiene Powershell, puedes hacer algo como esto (asumiendo el script BAT / CMD):
CALL:ECHORED "Print me in red!"
:ECHORED
%Windir%/System32/WindowsPowerShell/v1.0/Powershell.exe write-host -foregroundcolor Red %1
goto:eof
Lo miré porque quería introducir algunos colores de texto simples en 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
Me molestó la falta de coloración adecuada en cmd también, así que seguí y creé cmdcolor . Es solo un proxy stdout, que busca un conjunto limitado de secuencias de control ANSI / VT100 (en otras palabras, como en bash), es decir, echo /033[31m RED /033[0m DEFAULT | cmdcolor.exe
echo /033[31m RED /033[0m DEFAULT | cmdcolor.exe
.
Para que esto funcione en Windows 10, puede habilitar este indicador: ENABLE_VIRTUAL_TERMINAL_PROCESSING
.
Con esta clave de registro puede configurar esto de forma predeterminada
[HKCU/Console] VirtualTerminalLevel dword 0x1
Puede usar ANSICON para habilitar los códigos de terminal ANSI en Windows moderno. Hay versiones de 32 y 64 bits que he usado en Windows XP y Windows 7.
Se trata de un híbrido bat / .net autocompilado (debe guardarse como .BAT
) que se puede usar en cualquier sistema que tenga .NET Framework instalado (es raro ver una ventana sin .NET framework incluso para el XP más antiguo). / 2003 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://.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;
Ejemplo coloroutput.bat -s "aa/nbb/n/u0025cc" -b 10 -f 3 -n -e
También puede verificar la función de color de carlos -> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453
Simplemente puede crear archivos con el nombre de la palabra para imprimir, usa findstr que puede imprimir en color y luego borra 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
Ejecutar color /?
para obtener una lista de colores.
Solíamos hacer esto con http://en.wikipedia.org/wiki/ANSI_escape_code . No estoy seguro si todavía funcionan, pero podrías probarlos.
Tendrá que hacer eco de 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
Usa el comando de color. Fácil e integrado.
Color 0F
Es blanco y negro
Color 0A
Es negro y verde
puedes 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