variable linea entorno comandos color batch windows command-line colors

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.

Documentación de MSDN

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 .

Uso y descargas .


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.




Usa el comando de color. Fácil e integrado.

Color 0F

Es blanco y negro

Color 0A

Es negro y verde