Batch Programmierung - Verschiedene Schriftfarben in einem Fenster?

So stelle ich mir das vor. - (programmieren, Batch)

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Schon lustig, wie sich hier die Profis damit brüsten, dass sie sehr erfahren in Batch seien, nur um dann zu sagen, dass sie keine Lösung haben.

Das geht mit Hilfe des FINDSTR-Befehls und des SET/P-Befehls.

Hier der Code einer Datei, die mehrere Farben in einem CMD-Fenster schreibt:

@echo off
:: Original author: Unknown
:: Editor: GrellesLicht28
REM To write a text before colored text, use a SET/P-command before the CALL-command.
REM To write a text between two colored texts, use a SET/P-command between two CALL-commands.
REM To write a text after all colored texts, use an ECHO-command. If you do not want to write anything after it, use "ECHO."
REM The last colored text should have "end" as third parameter.
title Colour Text
echo These are the colored texts:
echo.
call :ColorText 0a "GREEN"
set /p ".= " <nul
call :ColorText 0c "RED"
set /p ".= " <nul
call :ColorText 09 "BLUE"
set /p ".= " <nul
call :ColorText 0d "PINK"
set /p ".= " <nul
call :ColorText 0e "YELLOW"
set /p ".= " <nul
call :ColorText 08 "GRAY" end
echo.
echo.


set /p ".=Text before " <nul
call :ColorText 0a "GREEN"
set /p ".= and between green and " <nul
call :ColorText 0c "RED" end
echo. and after red.
echo.
echo.
pause
exit

:: Keep this label exactly as it is and do not change anything here!
:ColorText [%1 = Color] [%2 = Text]
set /p ".=." > "%~2" <nul 
findstr /v /a:%1 /R "^$" "%~2" nul 2>nul
set /p ".={BS}{BS}" <nul
if "%3" == "end" set /p ".=  {BS}{BS}" <nul
del "%~2" >nul 2>nul
exit /b

Gutefrage kann die {BS} nicht darstellen, die müssen mit Ascii-Code 08 ersetzt werden.

Zur Erklärung:

Die CALL-Befehle rufen die Schleife am Ende auf. Diese Schleife ist der Kern der Datei. Dazu komme ich gleich.

Die SET/P-Befehle zwischen CALL schreiben ein einzelnes Leerzeichen in die aktuelle Zeile, um die einzelnen Teile, die man in verschiedenen Farben schreiben will, zu trennen.

Der Mittelteil dient nur als Filler bzw. als Beispiel.

Nun die Schleife:

Zuerst erstellt das Programm eine Datei (SET/P-Befehl) mit dem Namen, den du in den CALL-Befehlen festlegst. Dieser Name ist der Text, der am Ende ausgegeben wird. "call :ColorText 0a "GREEN"" erstellt z.B. die Datei "GREEN". Mit Hilfe des Farbcodes 0a kommt grüne Schrift auf schwarzem Hintergrund raus.

Als nächstes durchsucht das Programm (FINDSTR-Befehl) die gerade erstellte Datei nach Code, welchen sie definitiv findet. Der Output dieses Befehls ist "Dateiname:Inhalt", in dem Beispiel "GREEN:.". Der Inhalt ist nur ein einziger Punkt.

Mit Hilfe des nächsten SET/P-Befehls gehen wir zwei Buchstaben in der aktuellen Zeile zurück (dazu dient das {BS} bzw. Backspace). Das erlaubt, dass man mit dem nächsten CALL-Befehl (also dem nächsten Aufruf der Schleife) den einzelnen Punkt und den Doppelpunkt (zwischen Dateiname und Inhalt) überschreibt als wären sie nie da gewesen.

wüsste ich jetzt auch nicht und ich kann batch eigentlich auch relativ gut

vlt geht das ja mit java, wenn du eclipse nicht benutzt, läuft ja auch mit cmd als textconsole

eazy peazy

0 Schwarz 1 Dunkelblau 2 Dunkelgrün 3 Blaugrün 4 Dunkelrot 5 Lila 6 Ocker 7 Hellgrau 8 Dunkelgrau 9 Blau A Grün B Zyan C Rot D Magenta E Gelb F Weiß

Beispiel:

@Echo off
:START
color C
echo swag
GoTo START
:ENDE
crazylumi  18.06.2014, 18:40

grad selber gemerkt, dass es analog nicht geht. Du kannst höchstens nach ner Zeit das clearen und dann wieder ändern.

0
MyronZeon  18.06.2014, 20:43

das ist ja nur 1 farbe bei 1ner ausgabe, die wiederholt wird...

0