Ich weiß, dass der color bf
Befehl die Farben des gesamten Befehlszeilenfensters festlegt, aber ich wollte eine einzelne Zeile in einer anderen Farbe drucken.
217
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:
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.
MSDN-Dokumentation
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 :quelle
.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.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
quelle
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):
Edit: (jetzt einfacher!)
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
(anstatt wie oben eine separate Batch-Datei zu erstellen) verwendet werden.
Beispiel:
Mehr Informationen:
Die vollständige Liste der Farben und weitere Informationen finden Sie in der
- PowerShell- Dokumentation für
Write-Host
quelle
Windows 10 - TH2 und höher:
(aka Version 1511, Build 10586, Release 2015-11-10)
Auf Eingabeaufforderung:
Verwenden der eigentlichen Tasten: Echo Ctrl+ [
[32m HI
Ctrl+[[0m
EnterDarunter 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:quelle
\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:
Führen Sie aus
color /?
, um eine Liste der Farben zu erhalten.quelle
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.
quelle
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.Nutzung und Downloads .
quelle
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.
quelle
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 verwendetECHO
. DerPROMPT
Befehl akzeptiert dasescape
Zeichen in beliebiger Editorform als$E
Zeichenfolge. (Ersetzen Sie einfach dieEsc
in den ASCII-Escape-Codes ) durch$E
.Hier ist ein Demo-Code:
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 diePROMPT
Farbe beeinflusst, sodass die Farbe ohnehin zurückgesetzt werden mussquelle
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=←
durchfor /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 derprompt
Befehl in einem untergeordneten Prozess ausgeführt wird). Übrigens. Ihrechos.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:
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.
quelle
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
quelle
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
quelle
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
quelle
Fügen Sie die folgenden Zeilen in eine Datei ein, die
ColourText.bas
auf Ihrem Desktop aufgerufen wird .Speichern Sie es und geben Sie Folgendes in eine Eingabeaufforderung ein.
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
nicht1
.EG Um Blau auf Weiß zu setzen, indem kein Text übergeben wird, dann Rot auf Weiß, und Blau auf Grau.
oder
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
nicht8
.quelle
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
quelle
Eine Alternative ist die Verwendung von NodeJS .
Hier ist ein Beispiel:
Und das ist das Ergebnis:
quelle
Wie Glenn Slayden in dieser Antwort sagte , können Sie der Registrierung den richtigen Wert hinzufügen, um das cmd "bunter" zu machen.
quelle
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.
So schreiben Sie eine Fehlermeldung.
So schreiben Sie eine Fortschrittsmeldung .
quelle
quelle
%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): Dercolor
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.
quelle
Mit dem Befehl color können Sie die Farbe der gesamten Konsole ändern
Ist schwarz und weiß
Ist schwarz und grün
quelle