Wie färbt man in einer CMD box nur bestimmte Zeilen?

2 Antworten

Der folgende Code benutzt die Farbfunktion des FINDSTR-Befehls, um nur einzelne Wörter farbig darzustellen. Da er Dateien erstellen muss, brauchst du Zugriff auf das Dateisystem, damit er funktioniert.

Die Funktion "ColorText" hat den Code

:ColorText [%1 = Color] [%2 = Text]
  set /p ".=." > "%~2" <nul
  findstr /v /a:%1 /R "^$" "%~2" nul 2>nul
  set /p ".={BS}{BS} {BS}{BS}" <nul
  del "%~2" >nul 2>nul
exit /b

Die Funktion wird aufgerufen mit dem Befehl

call :ColorText FarbCode "Text"

Sie erstellt zuerst eine Datei mit Dateinamen "Text" und einem einzelnen Punkt als Inhalt mit Hilfe des SET/P-Befehls.

Anschließend zeigt sie per FINDSTR diese Datei mit Inhalt an. Mit dem /a-Parameter wird angegeben, welche Farbe der Dateiname bei der Ausgabe haben soll. Dadurch wird der Text eingefärbt.

Mit einem weiteren SET/P-Befehl überschreibt der CMD-Cursor die letzten beiden Zeichen mit Leerzeichen. {BS} musst du mit Ascii-Zeichen 08 ersetzen (Alt gedrückt halten und 08 auf dem Ziffernblock eingeben, funktioniert nur mit Skript-Notepads wie Notepad++). BS steht für Backspace. Grund dafür ist, dass FINDSTR's Ausgabe "Dateiname:Inhalt" entspricht. Der Inhalt ist ein einzelner Punkt. Er und der Doppelpunkt würden sonst stehen bleiben.

Beispiel:

echo Das sind farbliche Texte:
echo.
set /p ".=Text vor " <nul
call :ColorText 0a "der Farbe"
set /p ".=, dazwischen " <nul
call :ColorText 0c "[Hier ist rot]"
set /p ".= und danach." <nul
echo.