37414
Goto Top

Batchdatei einzelne Zeilen farbig oder fett darstellen

Hallo,

ich suche eine Möglichkeit, mehrere unterschiedliche Zeilen einer Batchdatei in einer anderen Farbe anzuzeigen.

Mit folgendem Code kann ich grds. die Hintergrund- und Schriftfarbe ändern:

color 9F


Das funktioniert! Aber um jetzt im Code dieses Fensters mit blauem Hintergrud und weißer Schrift, einzelne Zeilen in z.B. gelber Farbe darzustellen, habe ich schon eine Menge gegoogelt.
Dabei habe ich eine Menge Tipps gefunden, aber bisher hat keiner davon das richtige Ergebnis gebracht.

Hier mal ein Beispiel:

^<ESC^>[93m [93mYellow[0m

oder:

echo ^<ESC^>[93m [93mYellow[0m

Es wurde immer dieser Code im CMD-Fenster angezeigt, obwohl eigentlich das Wort "Yellow" hätte in gelb angezeigt werden sollen.

Was mache ich falsch?

Gruß,
imebro

Content-ID: 572343

Url: https://administrator.de/contentid/572343

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

SeaStorm
SeaStorm 16.05.2020 aktualisiert um 19:17:35 Uhr
Goto Top
Zitat von @37414:

Hallo,
Hi
> echo ^<ESC^>[93m [93mYellow[0m
> 

Es wurde immer dieser Code im CMD-Fenster angezeigt, obwohl eigentlich das Wort "Yellow" hätte in gelb angezeigt werden sollen.
Was mache ich falsch?
Dann musst du den Beitrag in Stackoverflow ganz lesen
Windows before 10 - no native support for ANSI colors on the console
...
The ColorTool enables you to change the color scheme of the console. It's part of the Microsoft Terminal project.


Schmeiss den Batch kram weg und mach es in Powershell face-smile
cykes
cykes 16.05.2020 aktualisiert um 19:26:41 Uhr
Goto Top
Nabend,

Was mache ich falsch?
Nimmst Du einen gescheiten Editor, bspw. Notepad++?
Du hast vermutlich hier gelesen: https://stackoverflow.com/questions/2048509/how-to-echo-with-different-c ... ?

Auch die Diskussion unter der ersten Antwort lesen. In Deiner Zeile
echo ^<ESC^>[93m [93mYellow[0m

wird das ESC-Zeichen falsch eingefügt. Zuerst musst Du das vor jeder eckigen Klammer machen und zwar mit ALT+0 2 7 (die 0 2 7 auf der Zehnertastatur eintippen)
Das kann man leider im Forumseditor nicht darstellen.
geht nur ansatzweise so:
echo {ALT+027}[93m {ALT+027}[93mYellow{ALT+027}[0m
(Bitte nicht 1:1 kopieren!)
Aber man sieht das dann nur in einem gescheiten Editor.

Gruß

cykes
ricardobohner
ricardobohner 16.05.2020 aktualisiert um 19:36:58 Uhr
Goto Top
Probier es mal mit diesem code:

@echo off
SETLOCAL EnableDelayedExpansion
chcp 1252 > Nul

for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (  
set "DEL=%%a"  
)
echo.
echo  Meine Farben
echo.

call :ColorText C " Hallo, ich bin rot"  
echo.&echo.
call :ColorText A " Hallo, ich bin gruen"  
echo.&echo.
call :ColorText E " Hallo, ich bin gelb"  
echo.&echo.
call :ColorText C " Rot"  
call :ColorText A " Gruen"  
call :ColorText E " Gelb"  
echo.&echo.
pause

exit
:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"  
findstr /v /a:%1 /R "^$" "%~2" nul  
del "%~2" > nul 2>&1  
goto :eof

Sollte so aussehen:

farben

Um eine bestimmt farbe zu verwenden must du dann halt immer die function call :ColorText und den code der farbe, den du von dem command color /? bekommen kannst

Zum beispiel um Lila zu schreiben:
call :ColorText D "Hallo, Ich bin Lila"
cykes
cykes 16.05.2020 um 19:30:03 Uhr
Goto Top
Sollte so aussehen:

farben
Der Hack stellt also die Sprache auch auf Spanisch? face-wink
ricardobohner
ricardobohner 16.05.2020 um 19:33:36 Uhr
Goto Top
Wieso Spanisch das ist Portuguisisch, LOL
37414
37414 16.05.2020 aktualisiert um 19:53:50 Uhr
Goto Top
Hey @ricardobohner

Das hat super funktioniert.
Bei mir übrigens auch am Ende in deutscher Sprache face-smile
Keine Ahnung, warum es bei Euch in Portugisisch ist...

Wenn ich jetzt nur eine einzige Zeile in Gelb haben möchte, was aus dem Code muss ich denn da eingeben?
Muss auch der Code der for-Schleife eingegeben werden sowie auch unten der Code?

Das hier bringt jedenfalls die Fehlermeldung "Das Sprungziel - ColorText wurde nicht gefunden."
call :ColorText E " Hallo, ich bin gelb"  
echo.&echo.

Ich möchte das ja innerhalb einer Sicherungs-Batch haben face-wink

Gruß,
imebro
cykes
cykes 16.05.2020 um 19:51:00 Uhr
Goto Top
... oder so - war ja auch nicht so ernst gemeint face-smile
ricardobohner
ricardobohner 16.05.2020 aktualisiert um 20:43:43 Uhr
Goto Top
Ja die for und :ColorText function musst dann halt mit in deine batch kopieren. Und der code macht den text nicht wirklich Portuguisisch das ist halt bei mir so weil ich Brasilianer bin und mein Windows auf Portuguisisch ist.

@echo off
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 E " Hallo, ich bin gelb"  
echo.&echo.
pause
exit

:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"  
findstr /v /a:%1 /R "^$" "%~2" nul  
del "%~2" > nul 2>&1  
goto :eof

Du musst die Function auch nicht ColorText nennen du kannst sie auch Farben nennen. Ich glaube das ist am einfachsten zu merken einfach diesen code am anfang vom Batch kopieren in dem du verschiedene Farben benutzen willst:

@echo off
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (set "DEL=%%a")  
goto :Ueberspringen
:Farben
echo off
<nul set /p ".=%DEL%" > "%~2"  
findstr /v /a:%1 /R "^$" "%~2" nul  
del "%~2" > nul 2>&1  
goto :eof
:Ueberspringen

Danach kannst einfach so Farben einsetzen:

Call :Farben E " Ich bin gelb"  
echo.&echo.
Call :Farben 4E "Ich bin gelb mit rotem Hintergund"  
echo.&echo
pause

Das sieht dann so aus:

rot
37414
37414 16.05.2020 aktualisiert um 22:25:01 Uhr
Goto Top
@ricardobohner

Wow... vielen Dank für Deine Mühe.
Werde es mal so in meine Batch einbauen und bin schon gespannt.

Allerdings wird dann der Hintergrund der Zeile in schwarz ausgegeben. Ich habe am Anfang der Batch den folgenden Code gesetzt:

color 9F

Jetzt habe ich mit dem folgenden Code getestet, ob ich den Hintergrund wieder blau bekomme und die schrift gelb:

Call :Farben 9E " Ich bin gelb"  
echo.&echo.

...funktioniert face-smile

Gruß,
imebro
37414
37414 16.05.2020 um 22:58:57 Uhr
Goto Top
Habt Ihr vielleicht noch einen Tipp, wie man bei einem CHOICE-Code ein paar Leerzeichen zwischen dem Code und den Text bringt?

Bisher mache ich es so:

CHOICE /N /C JN /M ".          Hier steht eine Frage? --> (J)a, (N)ein: " 

Das funktioniert, aber vorne am Rand steht dann halt der Punkt "."
Geht das auch irgendwie ohne diesen Punkt?
Bei einer echo-Zeile funktioniert das ja auch problemlos mit Leerstellen face-wink

Gruß,
imebro
ricardobohner
ricardobohner 17.05.2020 aktualisiert um 05:27:09 Uhr
Goto Top
Also, normalerweise mögen es "set /p" und "choice" commands nicht das man ein Lehrzeichen vor dem Text stellt. Mit einem Trick geht es aber doch, indem man ein Backspace in eine variable rettet und diese dann im choice einsetzt:

for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"  
choice /N /C JN /M "a%BS%     Hier steht eine Frage? ---> (J)a, (N)ein: "  

So sollte es dann aussehen:

frage


Quelle: Stackoverflow.com
37414
37414 17.05.2020 um 09:57:13 Uhr
Goto Top
Danke Dir... hat super funktioniert.

Also - diese for-Schleifen das kapiere ich wirklich überhaupt nicht.
Habe eben mal versucht, den Inhalt nachzuvollziehen, obwohl ich ja jetzt weiß, was passiert... dennoch waren das "spanische Dörfer" für mich face-wink

Gruß,
imebro
37414
37414 17.05.2020 um 10:48:24 Uhr
Goto Top
@ricardobohner

Hättest Du vielleicht auch noch eine Antwort auf meine letzte Frage in folgendem Thread?

Anderer Thread

Gruß,
imebro