In einer Batch Datei Text mit Farbe?

1 Antwort

Die Ausgabefarbe der Console lässt sich mit dem Befehl COLOR setzen.

Diese bezieht sich jedoch auf die gesamte Console und nicht auf einzelne Zeilen oder Zeichen.

demo1.cmd

@echo off
color 1F
echo Hallo Welt
  rem warte 3Sekunden
timeout 3 >nul
  rem die Änderung  der Farbattribute mit color ändert auch  bereits ausgegebene Zeilen.
color 49
echo Hallo Welt
pause

Batch ist eigentlich keine Sprache, um igendwelche Schönheitspreise zu gewinnen. Individuelle Farbgebung einzelner Zeilen/Worte/Zeichen geht entsprechend weit über den Anfängerlevel hinaus.

BasisFormatierung.cmd

::https://docs.microsoft.com/de-de/windows/console/console-virtual-terminal-sequences#text-formatting
@echo off
chcp 65001 >nul & rem Umlaute anzeigen


  rem teste ob unter  Win 10 (ab 1903)  die neuen Consolfunktionen eingeschalten sind...
for /f "tokens=3 delims=." %%a in ('ver') do (
    if %%a geq 18362 (reg query "HKCU\Console" /v "ForceV2"|find "REG_DWORD    0x0">nul && (
            echo Neue Consolenfunktionen  sind ausgeschaltet!) || goto :init
    ) else ( echo Benötige Windows 10 ab Version 1903)
)
timeout 3 >nul
exit /b

:init
  rem erzeuge Escape-Char
for /f %%. in ('"echo prompt $E|cmd"') do set "ESC=%%."

  rem Basis-Sequenzen
  rem setze gib Zeile mit 16 Vordergundfarbe aus:
echo %ESC%[0mHallo Standard
echo %ESC%[32mHallo Vordergrund Grün
echo %ESC%[95mHallo Vordergrund leuchtend Magenta

  rem Kombination verschiedener  Basissequenzen (frei kombinierbar getrennt semikolon)
echo %ESC%[93;104mHallo Vordergrund leuchtend Gelb,Hintergrund leuchtend Blau
echo %ESC%[91;4;49mHallo Vordergrund leuchtend Rot,Unterstrichen,Hintergrund Standard
echo %ESC%[7mFarben negativ,nächste Zeile  wieder Positiv%ESC%[27m
  rem innerhalb der Zeile farben ändern
echo %ESC%[97;44mHallo Vordergrund leuchtend Weiß,Hintergrund blau,%ESC%[95mVordergrund leuchtend Magenta,nächste Zeile komplett Standard%ESC%[0m
pause

Die Testroutine kannst Du weglassen, wenn Sicher ist, das die getesteten Bedingen passen (dürfte in allen einigermaßen aktuellen Windowsversionen zutreffen).

ExtendetColors.cmd

::https://docs.microsoft.com/de-de/windows/console/console-virtual-terminal-sequences#extended-colors
@echo off
setlocal enableDelayedExpansion
chcp 65001 >nul & rem Umlaute anzeigen
mode 150,20

:init
 rem erzeuge Escape-Char
for /f %%. in ('"echo prompt $E|cmd"') do set "ESC=%%."
set "saveCursorPos=%ESC%7"
set "loadCursorPos=%ESC%8"
set "CursOff=%ESC%[?25l"
set "CursOn=%ESC%[?25h"
:: Ende Vorbereitung
color 1f

echo 16 Colors
echo %saveCursorPos%
for /l %%a in (0,1,15) do (
   rem Leerzeichen voranstellen
  set "__num=  %%a"
  set "__num=!__num:~-4!"
  echo %loadCursorPos%%ESC%[48;5;%%am!__num!%saveCursorPos%
)

echo %ESC%[44m6x6x6 Farbraum
 rem Cursorposition ist noch immer am Ende der vorangehenden Schleife gespeichert!
 rem Der Cursor befindet jedoch woanders... Diese Position für den Begin der neuen Schleife speichern.
 rem !!! Die Cursorposition wird gespeichet bevor der Zeilenvorschub von echo ausgeführt wird!!!! (dieser --und alles Folgende-- wird von %loadCursor% Nichtig gemacht)
echo %saveCursorPos%
 for /l %%r in (15,36,225) do (
  for /l %%c in (1,1,36) do (
    set /a "__num=%%r+%%c"
    set "__numstr=  !__num!"
    echo %loadCursorPos%%ESC%[48;5;!__num!m!__numstr:~-4!%saveCursorPos%
  )
  echo %saveCursorPos%
)
echo %ESC%[1A%ESC%[44m24 Graustufen
echo %saveCursorPos%
for /l %%a in (232,1,255) do (
  set "__num=  %%a"
  set "__num=!__num:~-4!"
  echo %loadCursorPos%%ESC%[48;5;%%am!__num!%saveCursorPos%
)

echo %ESC%[44mRegenbogen
echo %saveCursorPos%
for /l %%a in (16,36,196) do (echo %loadCursorPos%%ESC%[48;5;%%am %saveCursorPos%)
for /l %%a in (202,6,226) do (echo %loadCursorPos%%ESC%[48;5;%%am %saveCursorPos%)
for /l %%a in (190,-36,46) do (echo %loadCursorPos%%ESC%[48;5;%%am %saveCursorPos%)
for /l %%a in (41,-5,21) do (echo %loadCursorPos%%ESC%[48;5;%%am %saveCursorPos%)
for %%a in (20,55,53,16) do (echo %loadCursorPos%%ESC%[48;5;%%am %saveCursorPos%)
echo:
pause
exit /b

Wenn Du bisher noch keinen Nervenzusammenbruch hast, das ganze auf die Spitze getrieben:

GostTyper_Multicolor.cmd

@echo off
chcp 65001 >nul
setlocal enableDelayedExpansion

call :initAnsi
call :initMacro

 rem Farbtabelle für den Regenbogen definieren
set "Regenbogen=,52,88,124,160,196,202,208,214,220,226,190,154,118,82,46,41,36,31,26,21,20,55,53,"
 rem Regenbogen Spiegeln (letzte Farbe zuerst) (auch Variablennamen unterliegen der Kreativität XD)
for %%a in (%Regenbogen%) do (set "negobnegeR=,%%a!negobnegeR!")

 rem mach nen Schmetteling draus
set "RegenbogenBfly=%Regenbogen%%negobnegeR%"

set "ShadesOfGray=237 238 239 240 241 242 243 244 245 246 247 248 249"
for %%a in (%ShadesOfGray%) do (set "notShadesOfGray=,%%a!notShadesOfGray%!")
 rem mach nen Schmetteling draus
set "SoGrayBfly=%ShadesOfGray%%notShadesOfGray%"
set "NightBlue=17"
set "OrangeWave=202 208 214 220 214 208"

 rem initilisiere für die angegebene Farbtabelle jeweils ein Array mit den Escape seqenzen für 
 rem Hintergrund Fabtabelle.B und Vordergrund Fabtabelle.F
for %%a in (RegenbogenBfly , ShadesOfGray , SoGrayBfly , NightBlue , OrangeWave) do ( call :initANSI_ColorArray %%~a)
)

rem Aufruf: verzögerung FarbeTabelleB/F ode =für Default "Text "
%#__gostType% 0 NightBlue.B     ".so geht man mit ""Gänsefüßchen"" & $$ um und ..."
%#__gostType% 0 NightBlue.B     "... so macht man ein  Ausrufezeichen $x ....."
%#__gostType% 0 NightBlue.B     """..?.+.*.~.§.@.µ.€.|.<.>.&.=.$p.$x.$$..........."""
%#__gostType% 2000 OrangeWave.F   "...$$x=$x.,.$$p=$p.,.$$$=$$.,.""""="".................."
%#__gostType% 2000 OrangeWave.b   "...$$x=$x.,.$$p=$p.,.$$$=$$.,.""""="".................."
%#__gostType% 2000 =        "......................I......................."
%#__gostType% 2000 =        "....................like......................"
%#__gostType% 2000 =        "..................Scripting. ................."
%#__gostType% 0  RegenbogenBfly.B "......................I......................."
%#__gostType% 1000 RegenbogenBfly.B "....................like......................"
%#__gostType% 4000 RegenbogenBfly.B "..............Background Colors..............."
%#__gostType% 8000 SoGrayBfly.B   "..............  some Gray  ..............."
%#__gostType% 2000 RegenbogenBfly.F "......................I......................."
%#__gostType% 2000 RegenbogenBfly.F "....................like......................"
%#__gostType% 2000 RegenbogenBfly.F "..............Foreground Colors..............."
%#__gostType% 20000 ShadesOfGray.F "..............  more Gray  ..............."

echo ende...
pause
exit /b

:::::: Helper Routines ::::::

:initANSI_ColorArray %1 VarName Colortable
set ".cIndex=0"
for %%a in (!%1!) do (
   rem Arrays mit Farbsequenzen anlegen BackGround und ForeGround
  set "CArray.%1.F.!.cIndex!=%ESC%[38;5;%%am"
  set "CArray.%1.B.!.cIndex!=%ESC%[48;5;%%am"
  set /a ".cIndex+=1"
)
set "%1.F.cIndex=%.cIndex%"
set "%1.B.cIndex=%.cIndex%"
exit /b


:initMacro
 rem als estes wird der else-Zweig aufgelöst beim aufruf des Macros folgen die Argumente dem set argv=
 rem im zweiten Schritt wird argv aufgelöst und die belegten Variablen getunnelt (wegen evt Sonderzeichen)
set #__gostType=for %%. in (1 2) do^
  if %%.==2 (^
    for /f "tokens=1,2*" %%a in ("^!argv^!") do (^
      set __StringToSplit=%%~c^&^
      call :draw __StringToSplit %%~a %%~b^
    )^
  ) else set argv=
exit /b

:initAnsi
 rem prüfe ob Escape-Sequenzen erlaubt sind (Windows 10 v1903)
 rem nur der !!!DWord!!!-Wert ForceV2=0 deaktiviert, alles andere erlaubt Escapesequenzen (ansonsten scheinen ANSISequenzen inzwischen by default unterstützt zu werden)
for /f "tokens=3 delims=." %%a in ('ver') do (
  if %%a geq 18362 (reg query "HKCU\Console" /v "ForceV2"|find "REG_DWORD  0x0">nul && (
      echo Neue Consolenfunktionen sind ausgeschaltet!) || goto :initAnsiVars
  ) else ( echo Benötige Windows 10 ab Version 1903)
)
timeout 5 >nul
exit /b
)
:initAnsiVars
 rem erzeuge ESC-Zeichen (ASCII 27)
for /f %%. in ('"echo prompt $E|cmd"') do set "ESC=%%."
 rem Cursormacros:
set "saveCursorPos=%ESC%7"
set "loadCursorPos=%ESC%8"
set "CursOff=%ESC%[?25l"
set "CursOn=%ESC%[?25h"

set "resetColor=%ESC%[0m"

 rem Cursor unsichtbar machen
echo %saveCursorPos%%CursOff%
exit /b

:::::: subroutines  :::::

:draw
set "lastColorIndex=-1
set "%~1=!%~1:""="!"
 rem Stringlänge-1 ermitteln
@(echo !%~1!)>"%temp%\%~n0.len"
for %%a in ("%temp%\%~n0.len?") do set /a "%~1.maxIndex=%%~za-3"
for /l %%. in (0,1,!%~1.maxIndex!) do (
  set Char=!char!!%~1:~%%.,1!
   rem kommt ein Platzhalter:
  if "!char!" neq "$" (
     rem für ein Ausrufezeichen?
    if /i "!char!"=="$X" set "char=^!"
    if /i "!char!"=="$P" set "char=%%"
    if  "!char!"=="$$" set "char=$"
    set /a "lastColorIndex+=1 , __cNr=lastColorIndex %% %3.cIndex" 2>nul
     rem Fabnummer in den als Laufvariable in den Arrayindex mogeln... (!array!index !! geht nicht)
    for %%. in ("!__cNr!") do (
      echo:%loadCursorPos%!CArray.%~3.%%~.!!char!%saveCursorPos%
    )
     rem Bremsschleife
    for /l %%. in (1,1,%~2) do (call)
    set "char="
  )
)
echo:%resetColor%%saveCursorPos%
exit /b



Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

StephanosWelt1 
Beitragsersteller
 10.02.2022, 15:03

Danke! Aber könntest du mir bitte wenn es möglich den Text mit meiner gewünsten Farbe in einer Batch Datei Programmieren

Hallo{Grün} Welt{Schwarz}

Hallo{Grün} Welt{Schwarz}

Hallo{Grün} Welt{Schwarz}

Hallo{Grün} Welt{Schwarz}

----------------Servus---------------- {Blau}

0