it-swarm.com.de

In den Windows-Befehlszeilen mit verschiedenen Farben anzeigen

Ich weiß, dass der Befehl color bf die Farben des gesamten Befehlszeilenfensters festlegt, aber ich wollte eine einzelne Zeile in einer anderen Farbe drucken.

150
rui

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

Bei Windows-Versionen unter 10 unterstützt die Windows-Befehlskonsole standardmäßig keine Ausgabefarbe. Sie können entweder Cmder , ConEmu , ANSICON oder Mintty (standardmäßig in GitBash und Cygwin verwendet) installieren, um die Windows-Befehlskonsole farblich zu unterstützen.

Windows 10 - Befehlszeilenfarben

Ab Windows 10 unterstützt die Windows-Konsole standardmäßig ANSI-Escape-Sequenzen und einige Farben. Die Funktion wurde im November 2015 mit dem Threshold 2-Update ausgeliefert.

MSDN-Dokumentation

Demo

 enter image description here

Stapelbefehl

Der 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
180
Jens A. Koch

Dies ist ein selbstkompilierter bat/.net-Hybrid (sollte als .BAT gespeichert werden), der auf jedem System verwendet werden kann, auf dem das .net-Framework installiert ist die ältesten XP/2003-Installationen). Es verwendet den jscript.net-Compiler, um ein Exe zu erstellen, das Strings mit unterschiedlicher Hintergrund-/Vordergrundfarbe 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:

 enter image description here

Beispiel:

coloroutput.bat -s "aa\nbb\n\u0025cc" -b 10 -f 3 -n -e

Dieses Skript finden Sie auch hier .

Sie können auch die Farbfunktion von carlos überprüfen -> http://www.dostips.com/forum/viewtopic.php?f=3&t=4453

46
npocmaka

Dies ist keine großartige Antwort, aber wenn Sie wissen, dass die Ziel-Workstation über Powershell verfügt, können Sie Folgendes tun (vorausgesetzt, das BAT/CMD-Skript):

CALL:ECHORED "Print me in red!"

:ECHORED
%Windir%\System32\WindowsPowerShell\v1.0\Powershell.exe write-Host -foregroundcolor Red %1
goto:eof

Bearbeiten: (jetzt einfacher!)

Es ist eine alte Antwort, aber ich dachte mir, ich würde ein bisschen klarer und einfacher machen

img

PowerShell ist jetzt enthalten in allen Versionen von Windows seit 7. Daher kann die Syntax für diese Antwort auf eine einfachere Form verkürzt werden:

  • path muss nicht angegeben werden, da es bereits in der Umgebungsvariablen enthalten sein muss.
  • eindeutige Befehle können abgekürzt sein. Zum Beispiel können Sie:
    • verwenden Sie -fore anstelle von -foregroundcolor
    • verwenden Sie -back anstelle von -backgroundcolor
  • der Befehl kann grundsätzlich auch 'inline' anstelle von echo verwendet werden
    (anstatt eine separate Batchdatei wie oben zu erstellen).

Beispiel:

powershell write-Host -fore Cyan This is Cyan text
powershell write-Host -back Red This is Red background

Mehr Informationen:

Die vollständige Liste der Farben und weitere Informationen finden Sie im
- PowerShell Dokumentation für Write-Host

34
Iain

Sie können nur Dateien mit dem Namen des zu druckenden Words erstellen, findstr verwenden, der in Farbe gedruckt werden kann, und anschließend 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 color /? aus, um eine Liste mit Farben zu erhalten.

17
Tutankhamen

Sie können ANSICON verwenden, um ANSI-Terminalcodes in modernen Windows zu aktivieren. Es gibt 32- und 64-Bit-Versionen, die ich in Windows XP und Windows 7 verwendet habe.

13
Bryan Ash

Windows 10 - TH2 und höher:

Auf Eingabeaufforderung:

echo ^[[32m HI ^[[0m

Mit den eigentlichen Tasten: Echo Ctrl+[[32m HICtrl+[[0mEnter

Sie sollten ein grünes "HI" darunter sehen.

Codenummern finden Sie hier:

Notizblock:

Um dies im Editor zu speichern, können Sie ESC eingeben: Alt+027 mit dem Nummernblock, dann der Teil [32m. Ein weiterer Trick, wenn ich auf einem Laptop war, leiten Sie die obige Zeile in eine Datei um, um zu beginnen, dann schneiden und einfügen:

echo echo ^[[32m HI ^[[0m >> batch_file.cmd
11
Gringo Suave

Ich ärgerte mich auch über das Fehlen einer korrekten Farbgebung in cmd, also habe ich cmdcolor erstellt. Es ist nur ein stdout-Proxy, der nach einer begrenzten Menge von ANSI/VT100-Steuersequenzen (mit anderen Worten wie in bash) sucht, d. H. echo \033[31m RED \033[0m DEFAULT | cmdcolor.exe.

Verwendung und Downloads .

6

Ich habe mir das angesehen, weil ich einige einfache Textfarben in eine Win7-Batch-Datei einfügen wollte. Das ist was ich mir ausgedacht habe. 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
5
Nick-n-Chicago

sie könnten cecho verwenden. Sie können es auch verwenden, um direkt in Ihr Skript einzubetten, sodass Sie keine .com- oder .exe-Dateien mit sich führen müssen

http://www.codeproject.com/Articles/17033/Add-Colors-to-Batch-Files

1
Brian Gleason

Alternativ können Sie NodeJS verwenden.

Hier ist ein Beispiel:

const os = require('os');
const colors = require('colors');

console.log("Operative System:".green,os.type(),os.release());
console.log("Uptime:".blue,os.uptime());

Und das ist das Ergebnis:

 enter image description here

0
Josem

Sie müssen eine ANSI-Escape-Code-Sequenz angeben, 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

0

Fügen Sie die folgenden Zeilen in eine Datei mit dem Namen ColourText.bas auf Ihrem Desktop ein.

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. Verschiebe es in den Windows-Ordner .

Um zu verwenden, müssen Sie zwei Zeichencodes verwenden, um die Farbe einzustellen, z. B. 01 nicht 1

ColourText ColourOfText ColourOfTextWhenFinished Text

ZB Blau auf Weiß setzen, indem kein Text übergeben wird, dann Rot auf Weiß, dann 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

Interessant wird auch der Befehl CLS. Der Befehl Color 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 zusammen 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, zB 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.
0
user6017774

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

0
Michel de Groot

Als Glenn Slayden sagte in diese Antwort , können Sie der Registrierung den richtigen Wert hinzufügen, um die cmd "bunter" zu machen.

Glücklicherweise kann der globale Standard von Opt-In zu 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).

0
hawk1337