Frage von DavidKeller2003, 59

Wie kann ich in einem Batch Programm farbige Pixel einbauen , damit das Programm mehr als nur 2 Farben enthält?

Antwort
von S1r1us13, 39

Dazu gibt es folgende Funktion:

: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

Die Funktion wird aufgerufen mit dem Befehl

call :ColorText Farbcode "Text" [end]

Verfügbare Farbcodes kannst du mit "color /?" einsehen. Das "end" ohne Klammern brauchst du nur am Ende einer auszugebenden Zeile schreiben, damit kein ":." stehen bleibt.

Um Text vor oder nach dem farblichen Teil zu schreiben, kannst du

set /p ".=Text" <nul

benutzen. Um einen Zeilenumbruch zu machen, schreib "echo.". Damit der Code funktioniert, musst du alle {BS} mit Ascii-Code 08 ersetzen (Alt gedrückt halten und 08 auf dem Ziffernblock eingeben). Nun zur Erklärung:

Die Funktion erstellt eine Datei mit dem Namen, der am Ende als farbiger Text ausgegeben wird mit einem einzigen Punkt als Dateiinhalt. Das bedeutet, du kannst keine Sonderzeichen ausgeben lassen, die nicht in Dateinamen stehen dürfen (z. B. "?" oder " / ").

Mit dem FINDSTR-Befehl wird zuerst der Dateiname farbig ausgegeben (/a) gefolgt von einem Doppelpunkt und dem Punkt, der in der Datei steht. Über die beiden {BS} und zwei Leerzeichen werden die drei Punkte entfernt. Anschließend wird die erstellte Datei wieder gelöscht.

Mit "exit /b" verlässt CMD die mit CALL aufgerufene Funktion.

Kommentar von Raptor012 ,

Hallo  S1r1us13,

wenn ich deinen Code richtig interpretiere,  ändert dieser trotzdem nicht die Tatsache, das nur eine Hintergrund- und Textfarbe pro Fenster ausgegeben werden kann.

Bei dir wird lediglich der Farbcode später aus einem Zwischenspeicher hinzugefügt, bleibt aber dennoch im ganzen Fenster gleich.

Der Fragesteller wollte aber eher sowas "Mein Text" wobei z.B. jeder Buchstabe eine andere Farbe hat. Das ist aber bei Batch und CMD nicht realisierbar, wie bereist geschrieben.

Bei mir funktioniert dein Code übrigens nicht! Dort kommt folgende Ausgabe (bei @echo on)

C:\Users\NAME\Server\xampp\htdocs\Codeschnipsel\Test>set /p ".=."   1>"" 0<nul
Das System kann den angegebenen Pfad nicht finden.

usw. (Dadurch geht der Rest dann auch nicht)

Allerdings lasse ich mich gern noch einmal eines besseren belehren!

Mit freundlichen Grüßen

Raptor012

Kommentar von S1r1us13 ,

Du hast vergessen, bei dem CALL-Befehl den gewünschten Text einzugeben, wodurch "%~2" leer ist. Dadurch wird keine Datei erstellt, die dann auch nicht von FINDSTR gefunden werden kann.

Beispiel des CALL-Befehls:

call :ColorText 0a "Ich schreibe irg"
call :ColorText 0c "endwas" end

Durch Nutzung mehrerer CALL-Befehle mit verschiedenen Farbcodes werden in CMD auch verschiedene Farben gleichzeitig angezeigt.

Antwort
von Raptor012, 53

Hallo DavidKeller2003, 

Batch und CMD sind Stapelverarbeitungsprogramme aus dem Urschleim von Windows (Nur etwas aufgefrischt). Stapelverarbeitung heißt in diesem Fall, dass das Programm (wenn man es so nennen darf) immer nur einen punkt nach dem anderen abarbeitet und dabei in der Reihenfolge vorgeht wie man den Code auch liest. Somit ist auch immer nur eine Farbangabe pro Ausgabe möglich. (Z.B. mit COLOR a0 für Textfarbe und Hintergrundfarbe (schwarze Schrift und grüner Hintergrund).

Es gibt zwar Programme die das ändern, diese sind aber nicht zu empfehlen, das sie die CMD.exe meist beschädigen oder so verändern, das Windows eigene Prozesse Schwierigkeiten bekommen. 

Wenn du wirklich grafische Elemente bzw Farbei haben willst, bleibt dir leider nichts anderes übrig als eine andere Programmiersprache zu lernen.

Ich kann da Pyton und c++ sowie Java empfehlen. Das zu lernen dauert zwar eine weile, und ab und an ist man am verzweifeln, dafür lohnt sich dann das Ergebnis. :)

Ich hoffe ich konnte dir helfen 

LG

Raptor012

Kommentar von Raptor012 ,

ich wollte schreiben "...da sie die CMD.exe meist beschädigen, sodass .... "nicht "das ..." xD

Antwort
von Suboptimierer, 59

Mit COLOR XY (X,Y=0..F) kannst du die Schrift- und Hintergrundfarbe ändern, aber immer für den gesamten Text.

X=Hintergrundfarbe, Y=Schriftfarbe

Eine andere Möglichkeit kenne ich nicht.

Keine passende Antwort gefunden?

Fragen Sie die Community