Wie färbt man in einer CMD box nur bestimmte Zeilen?
Ich bin gerade dabei ein Programm zu schreiben, dass man über die Eingebeaufforderung bedient, und würde um das Design zu vergessern gerne nur bestimmte zeilen bzw. nur einzelne Wörter unterschiedlich färben.
Mit welchem Befehl geht das, da wenn ich z.b. color a eingebe, alles in der farbe ist?
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.
womit schreibst du das Programm?
Es gibt z.B. für Bash bestimmte Escape Sequenzen.
Beispiel: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
habe das eben erst verstanden, du meinst die Windows Eingabeaufforderung.
Dann mit "color [0-F]".