badbatchcoder
Goto Top

String ohne Addon einfärben

Liebe Batch-Community,

ist es möglich, ohne ein Addon (also nur mit Batch) Text in einer echo-Ausgabe anders einzufärben als den restlichen Text im Fenster des Programms?

Mir ist nämlich bisher nur der Befehl color bekannt, um die Farben zu verändern, was sich jedoch auf den Text der gesamten Seite bezieht.

LG BatchCoder

Content-ID: 584540

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

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

144705
144705 03.07.2020 aktualisiert um 19:36:55 Uhr
Goto Top
rubberman
rubberman 03.07.2020 um 19:47:49 Uhr
Goto Top
Sorry, aber jetzt wird's wirklich bunt. Für was in drei Teufels Namen braucht man das in Batch? Unabhängig davon, dass Batch seit 15 Jahren durch PowerShell obsolet ist, ist Batch dazu gedacht immer wiederkehrende stupide, administrative Aufgaben zu erledigen. Mehr war das nie und mehr wird das nie sein. An Dinosauriern wie mir braucht sich niemand mehr ein Beispiel zu nehmen. Es gibt keinen plausiblen Grund mehr mit Batch zu arbeiten oder es gar neu zu lernen. Batch Scripts richtig und narrensicher zu schreiben ist sowieso kaum bis gar nicht möglich.
Auf gar keinen Fall und unter gar keinen Umständen ist Batch dafür da irgendwas schön klicki-bunti zu machen oder womöglich sogar Spiele zu entwickeln. Dafür hat Batch weder die Power, noch wäre ein textbasiertes Consolefenster dazu geeignet. In deinem anderen Thread ist dir schon gezeigt worden, dass man selbst um ein Beep auszuschalten bereits mindestens die PowerShell bemühen muss. Und nur um dir zu verdeutlichen was dort passiert:
- aus dem cmd Prozess heraus muss ein PowerShell Prozess gestartet werden
- PowerShell parst den ScriptCode
- PowerShell erzeugt eine C# Klasse und kompiliert sie zu einer DLL um die Platform Invocation ausführen zu können
- PowerShell holt sich den Funktionspointer der Windows API Funktion
- Powershell ruft die API Funktion auf
- Powershell räumt den temporären Code und die DLL aus dem temp Verzeichnis und beendet den Prozess
So etwas kann Batch nicht. Und es ist unsinnig für jeden Task der mit Batch nicht zu erledigen ist eine PowerShell Instanz zu erzeugen. Das dauert Lichtjahre. Dann doch gleich mit PowerShell arbeiten und fertig...

So genug Background und zu deiner Frage, die dir Google vermutlich längst beantwortet hätte. Unter Windows 10 unterstützt der neue Console Host auch wieder ANSI Escapesequenzen. Mit denen ist das möglich.
https://docs.microsoft.com/en-us/windows/console/console-virtual-termina ...

@echo off &setlocal
for /f %%i in ('echo prompt $E^|cmd') do set "ESC=%%i"  

echo %ESC%[31;103mJust a simple
echo %ESC%[34;107mHello, World!%ESC%[0m
echo(
pause
Aber noch mal, nur weil etwas irgendwie geht, muss das noch längst nicht sinnvoll sein. Erst recht nicht mit Batch. Denn alleine um das Escape Zeichen in eine Variable zu bekommen, muss man schon wieder einen Hack bemühen.
TK1987
Lösung TK1987 03.07.2020 aktualisiert um 19:49:56 Uhr
Goto Top
Moin,

ich würde hier ebenfalls wieder auf einem Powershell Befehl zurückgreifen, da wesentlich unkomplizierter
powershell write-host -f red -b white 'Hallo Welt!'  
-f = -ForegroundColor = Vordergrundfarbe
-b = -BackgroundColor = Hintergrundfarbe

Gruß Thomas
144144
144144 03.07.2020 um 20:11:33 Uhr
Goto Top
Zitat von @rubberman:
So etwas kann Batch nicht. Und es ist unsinnig für jeden Task der mit Batch nicht zu erledigen ist eine PowerShell Instanz zu erzeugen. Das dauert Lichtjahre. Dann doch gleich mit PowerShell arbeiten und fertig...
Nur der Vollständigkeit halber: das Lichtjahr ist eine Einheit für eine Entfernung, nicht eine Zeitspanne.
rubberman
rubberman 03.07.2020 aktualisiert um 20:27:01 Uhr
Goto Top
Nur der Vollständigkeit halber: das Lichtjahr ist eine Einheit für eine Entfernung, nicht eine Zeitspanne.
🤣 Jaja. Aber ich will ja nur versuchen den Blickwinkel in die richtige Richtung zu drehen. Dass das wieder mal nur eine Blablabelehrung ist und man das ja gar nicht hören will, war mir fast klar. Aber dann ist halt Lernen durch Schmerz angesagt. Ich kanns nicht ändern. Und auch hier ist nun die akzeptierte Lösung wieder PowerShell und eigentlich nicht Batch. Nur der Vollständigkeit halber face-wink