Ich weiß, dass der color bf
Befehl die Farben des gesamten Befehlszeilenfensters festlegt, aber ich wollte eine einzelne Zeile in einer anderen Farbe drucken.
Ich weiß, dass der color bf
Befehl die Farben des gesamten Befehlszeilenfensters festlegt, aber ich wollte eine einzelne Zeile in einer anderen Farbe drucken.
Antworten:
Ich wollte eine einzelne Zeile in einer anderen Farbe drucken.
Verwenden Sie ANSI-Escape-Sequenzen.
Windows vor 10 - keine native Unterstützung für ANSI-Farben auf der Konsole
Für Windows-Versionen unter 10 unterstützt die Windows-Befehlskonsole standardmäßig keine Ausgabefarben. Sie können entweder Cmder , ConEmu , ANSICON oder Mintty (standardmäßig in GitBash und Cygwin verwendet) installieren , um Ihrer Windows-Befehlskonsole Farbunterstützung hinzuzufügen.
Windows 10 - Befehlszeilenfarben
Ab Windows 10 unterstützt die Windows-Konsole standardmäßig ANSI-Escape-Sequenzen und einige Farben. Die Funktion wurde mit dem Threshold 2-Update im November 2015 ausgeliefert.
Update (05-2019): Mit dem ColorTool können Sie das Farbschema der Konsole ändern. Es ist Teil des Microsoft Terminal- Projekts.
Demo
Stapelbefehl
Das win10colors.cmd
wurde von Michele Locati geschrieben :
@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
oder .bat
- beide sollten funktionieren. Aber ich glaube, ich weiß, warum es nicht funktioniert: Es scheint, dass das Escape-Symbol beim Posten in StackOverflow entfernt wird. Bitte kopieren Sie den Inhalt nicht aus meiner Antwort, sondern verwenden Sie den Inhalt hier: gist.githubusercontent.com/mlocati/…
ESC
in Notepad ++ generieren ... Sie können dies mit ALT-Codes tun, indem Sie den Nummernblock und die linke ALT-Taste verwenden: L-ALT
+ 0
+ 2
+7
ESC
Zeichen in einer Batch-Datei auf folgende Weise generieren :for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
Dies ist ein selbstkompilierter bat / .net-Hybrid (sollte gespeichert werden als .BAT
), der auf jedem System verwendet werden kann, auf dem .net-Framework installiert ist (Windows ohne .NET-Framework ist selbst für das älteste XP / 2003 selten zu sehen Installationen). Es verwendet den jscript.net-Compiler, um eine Exe zu erstellen, die Zeichenfolgen mit unterschiedlichen Hintergrund- / Vordergrundfarben nur für die aktuelle Zeile drucken kann.
@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;
Hier ist die Hilfemeldung:
Beispiel :
coloroutput.bat -s "aa\nbb\n\u0025cc" -b 10 -f 3 -n -e
Sie finden dieses Skript auch hier .
Sie können auch die Farbfunktion von Carlos überprüfen -> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453
Dies ist keine gute Antwort, aber wenn Sie wissen, dass die Zielarbeitsstation über Powershell verfügt, können Sie Folgendes tun (unter der Annahme eines BAT / CMD-Skripts):
CALL:ECHORED "Print me in red!"
:ECHORED
%Windir%\System32\WindowsPowerShell\v1.0\Powershell.exe write-host -foregroundcolor Red %1
goto:eof
Es ist eine alte Antwort, aber ich dachte, ich würde ein bisschen klarstellen und vereinfachen
Powershell ist jetzt enthalten in allen Versionen von Windows seit dem 7. Deshalb ist die Syntax für diese Antwort kann auf eine einfachere Form verkürzt werden:
-fore
statt-foregroundcolor
-back
statt-backgroundcolor
echo
powershell write-host -fore Cyan This is Cyan text
powershell write-host -back Red This is Red background
Die vollständige Liste der Farben und weitere Informationen finden Sie in der
- PowerShell- Dokumentation fürWrite-Host
Windows 10 - TH2 und höher:
(aka Version 1511, Build 10586, Release 2015-11-10)
Auf Eingabeaufforderung:
echo ^[[32m HI ^[[0m
Verwenden der eigentlichen Tasten: Echo Ctrl+ [[32m HI
Ctrl+[[0m
Enter
Darunter sollte ein grünes "HI" angezeigt werden.
Codenummern finden Sie hier:
Notizblock:
Um dies im Editor zu speichern, können Sie ESC eingeben, indem Sie: Alt+ 027
mit dem Nummernblock und dann mit dem [32m
Teil eingeben . Ein weiterer Trick, als ich auf einem Laptop war, leiten Sie die obige Zeile in eine Datei um, um loszulegen, und schneiden Sie sie dann aus und fügen Sie sie ein:
echo echo ^[[32m HI ^[[0m >> batch_file.cmd
\033
Ich habe es auch versucht, aber nein. Wie kann ich das in Java tun?
Sie können einfach Dateien mit dem Namen des zu druckenden Wortes erstellen, findstr verwenden, das in Farbe drucken kann, und dann die Datei löschen. Versuchen Sie dieses Beispiel:
@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
Führen Sie aus color /?
, um eine Liste der Farben zu erhalten.
Sie können ANSICON verwenden , um ANSI-Terminalcodes in älteren Windows-Versionen zu aktivieren. Es gibt 32- und 64-Bit-Versionen, die ich in Windows XP und Windows 7 verwendet habe.
Ich war auch verärgert über den Mangel an korrekter Farbgebung in cmd, also habe ich cmdcolor erstellt . Es ist nur ein Standard-Proxy, der nach einem begrenzten Satz von ANSI / VT100-Steuersequenzen sucht (mit anderen Worten, wie in Bash), d echo \033[31m RED \033[0m DEFAULT | cmdcolor.exe
. H.
cmdcolor.exe; PE32 executable for MS Windows (console) Intel 80386 32-bit
upx
. Könnten Sie mich bitte per E-Mail kontaktieren?
Ich habe mir das angeschaut, weil ich einer Win7-Batch-Datei einige einfache Textfarben hinzufügen wollte. Das habe ich mir ausgedacht. Danke für Ihre Hilfe.
@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
Es gibt bereits eine akzeptierte Antwort mit mehr als 250 Upvotes. Der Grund, warum ich immer noch einen Beitrag escape
leiste, ist, dass das für das Echo erforderliche Zeichen von vielen Editoren nicht akzeptiert wird (ich verwende z. B. MS Code) und alle anderen Lösungen Software von Drittanbietern (nicht Windows-Standard) erfordern.
Die Umgehung mit nur einfachen Stapelbefehlen wird PROMPT
anstelle von verwendet ECHO
. Der PROMPT
Befehl akzeptiert das escape
Zeichen in beliebiger Editorform als $E
Zeichenfolge. (Ersetzen Sie einfach die Esc
in den ASCII-Escape-Codes ) durch $E
.
Hier ist ein Demo-Code:
@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
HINWEIS: Der einzige Nachteil besteht darin, dass diese Technik mit den Cmd-Farbeinstellungen des Benutzers ( color
Befehl oder Einstellungen) kollidiert, wenn dies nicht explizit bekannt ist.
- Ich hoffe, dies hilft, da dies aus den eingangs genannten Gründen die einzige für mich akzeptable Lösung ist. - -
BEARBEITEN:
Aufgrund von Kommentaren füge ich ein weiteres Snippet bei, das von @Jeb inspiriert wurde. Es:
ECHO
Befehle.PROMPT
Wert wird also nicht beeinflusstECHO
Ausgabe zwangsläufig die PROMPT
Farbe beeinflusst, sodass die Farbe ohnehin zurückgesetzt werden muss@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
in verwendet batcolors / echo.bat “?
set ASCII27=←
durch for /F "delims=#" %%E in ('"prompt #$E# & for %%E in (1) do rem"') do set "ASCII27=%%E"
. Hierbei wird das durch den Eingabeaufforderungsbefehl erstellte Escapezeichen verwendet, ohne die Eingabeaufforderung dauerhaft zu ändern (da der prompt
Befehl in einem untergeordneten Prozess ausgeführt wird). Übrigens. Ihr echos.bat
Ich füge eine Antwort hinzu, um ein Problem zu beheben, das in einigen Kommentaren oben erwähnt wurde: Inline-Ansi-Farbcodes können sich in einer FOR-Schleife (tatsächlich in einem Codeblock in Klammern) schlecht verhalten. Der folgende .bat-Code zeigt (1) die Verwendung von Inline-Farbcodes, (2) den Farbfehler, der auftreten kann, wenn Inline-Farbcodes in einer FOR-Schleife oder in einem Codeblock in Klammern verwendet werden, und (3) eine Lösung für das Problem. Wenn der .bat-Code ausgeführt wird, zeigen die Tests 2 und 3 den Farbcodefehler, und Test 4 zeigt keinen Fehler, da er die Lösung implementiert.
[EDIT 2020-04-07: Ich habe eine andere Lösung gefunden, die vermutlich effizienter ist als das Aufrufen eines Unterprogramms. Fügen Sie die FINDSTR-Phrase wie in der folgenden Zeile in Klammern ein:
echo success | (findstr /R success)
ENDEDIT]
Hinweis: Nach meiner (eingeschränkten) Erfahrung tritt das Problem mit dem Farbcode erst auf, nachdem die Eingabe innerhalb des Codeblocks an FINDSTR weitergeleitet wurde. So reproduziert die folgende .bat das Problem. Möglicherweise ist das Problem mit dem Farbcode allgemeiner als nach dem Weiterleiten an FINDSTR. Wenn jemand die Natur des Problems erklären kann und es einen besseren Weg gibt, es zu lösen, würde ich es begrüßen.
@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
Sie können cecho verwenden. Sie können es auch verwenden, um es direkt in Ihr Skript einzubetten, sodass Sie keine .com- oder .exe-Datei mit sich führen müssen
http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files
Ich habe gerade von Win 7 Home auf Win 10 Pro konvertiert und wollte den Stapel, den ich von anderen Stapeln aufrufe, ersetzen, um Informationen in Farbe wiederzugeben. Wenn ich die oben beschriebenen Punkte überprüfe, verwende ich Folgendes, das meine vorherige Charge direkt ersetzt. HINWEIS: Fügen Sie der Nachricht "~" hinzu, damit Nachrichten mit Leerzeichen verwendet werden können. Anstatt mich an Codes zu erinnern, verwende ich Buchstaben für die Farben, die ich brauchte.
Wenn% 2 Leerzeichen enthält, ist "..."% 1 erforderlich. Starke Farben auf Schwarz: R = Rot G = GRÜN Y = GELB W = WEISS
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
Sie müssen eine ANSI-Escape-Code-Sequenz wiederholen, um die Textfarbe zu ändern: http://en.wikipedia.org/wiki/ANSI_escape_code
Eine weitere sehr gute Quelle für diese Escape-Codes ist http://ascii-table.com/ansi-escape-sequences.php
Fügen Sie die folgenden Zeilen in eine Datei ein, die ColourText.bas
auf Ihrem Desktop aufgerufen wird .
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
Speichern Sie es und geben Sie Folgendes in eine Eingabeaufforderung ein.
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc.exe" /target:exe /out:"%userprofile%\desktop\ColourText.exe" "%userprofile%\desktop\ColourText.bas" /verbose
Eine Datei mit dem Namen ColourText.exe wird auf Ihrem Desktop angezeigt. Verschieben Sie es in den Windows-Ordner .
Zur Verwendung müssen Sie zwei Zeichencodes verwenden, um die Farbe einzustellen, z . B. 01
nicht 1
.
ColourText ColourOfText ColourOfTextWhenFinished Text
EG Um Blau auf Weiß zu setzen, indem kein Text übergeben wird, dann Rot auf Weiß, und Blau auf Grau.
ColourText F1 F1
ColourText F2 71 This is green on white
oder
ColourText F1 F1
cls
ColourText F4 F4
Echo Hello
Echo Hello today
ColourText F1 F1
Auch der CLS
Befehl wird interessant. Color
Befehl ohne Parameter setzt alle Farben auf Startfarben zurück.
Um den Farbcode zu erhalten, addieren Sie die folgenden Zahlen. Verwenden Sie den Rechner im Programmiermodus. Dies sind Hex-Zahlen. Sie können addiert werden, z. B. Rot + Blau + FG Intensität = 13 = D. Da 10+ nicht verwendet wurde, ist der Hintergrund schwarz. Farbcodes MÜSSEN aus zwei Zeichen bestehen, z . B. 08
nicht 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.
Damit dies unter Windows 10 funktioniert, können Sie dieses Flag aktivieren : ENABLE_VIRTUAL_TERMINAL_PROCESSING
.
Mit diesem Registrierungsschlüssel können Sie dies standardmäßig festlegen
[HKCU\Console] VirtualTerminalLevel dword 0x1
Wie Glenn Slayden in dieser Antwort sagte , können Sie der Registrierung den richtigen Wert hinzufügen, um das cmd "bunter" zu machen.
Glücklicherweise kann der globale Standard von Opt-In in Opt-Out geändert werden. Der Registrierungsschlüssel unter HKEY_CURRENT_USER \ Console \ VirtualTerminalLevel legt das globale Standardverhalten für die Verarbeitung von ANSI-Escape-Sequenzen fest. Erstellen Sie einen DWORD-Schlüssel (falls erforderlich) und setzen Sie seinen Wert auf 1, um die ANSI-Verarbeitung standardmäßig global zu aktivieren (oder auf 0, um sie zu deaktivieren).
Das Festlegen der Farbe für die Protokollanweisungen in Powershell ist kein großer Freund.
Sie können -ForegroundColor
Parameter verwenden.
Eine Bestätigungsnachricht schreiben.
Write-Host "Process executed Successfully...." -ForegroundColor Magenta
So schreiben Sie eine Fehlermeldung.
Write-Host "Sorry an unexpected error occurred.." -ForegroundColor Red
So schreiben Sie eine Fortschrittsmeldung .
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%
ist leer, also wird das nicht funktionieren. echo !white!
setzt die Farbe auf weiß. So kehren Sie zu den Standardfarben zurück (unabhängig von den Benutzereinstellungen): Der color
Befehl ohne Parameter führt dies aus.
Früher haben wir dies mit ANSI-Terminalcodes gemacht . Ich bin mir nicht sicher, ob sie noch funktionieren, aber Sie könnten sie ausprobieren.
Mit dem Befehl color können Sie die Farbe der gesamten Konsole ändern
Color 0F
Ist schwarz und weiß
Color 0A
Ist schwarz und grün