Ich weiß, dass der color bfBefehl die Farben des gesamten Befehlszeilenfensters festlegt, aber ich wollte eine einzelne Zeile in einer anderen Farbe drucken.
Ich weiß, dass der color bfBefehl 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.cmdwurde 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
              .cmdoder .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/…
                    ESCin 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
                    ESCZeichen 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:
-forestatt-foregroundcolor-backstatt-backgroundcolorechopowershell 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+[[0mEnter
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+ 027mit dem Nummernblock und dann mit dem [32mTeil 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
              \033Ich 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 escapeleiste, 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 PROMPTanstelle von verwendet ECHO. Der PROMPTBefehl akzeptiert das escapeZeichen in beliebiger Editorform als $EZeichenfolge. (Ersetzen Sie einfach die Escin 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 ( colorBefehl 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:
ECHOBefehle.PROMPTWert wird also nicht beeinflusstECHOAusgabe zwangsläufig die PROMPTFarbe 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"
                    echoin 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 promptBefehl 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.basauf 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. 01nicht 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 CLSBefehl wird interessant. ColorBefehl 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. 08nicht 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 -ForegroundColorParameter 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 colorBefehl 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