Anzeige

Am Puls von Microsoft

Anzeige

Spielerei mit farbigen Zeilen in CMD und Batch-Dateien

edv.kleini

Win11 Registry-Fummler
Ganz wichtig!
Die Datei muss im ANSI-Format abgespeichert werden.
Administrative Rechte sind zum Ausführen der Datei erforderlich.
Wer noch mehr dazu beitragen will und noch etwas mehr dazu weiss, bitte gerne hier posten.
Code:
@echo off
cd /d "%~dp0"
cls
color f0
title %USERNAME%     Test mit farbigen und blinkenden Zeilen.
for /f %%. in ('"echo prompt $E|cmd"') do set "ESC=%%."
echo.
echo %ESC%[30mEine normale Zeile auf weissem Hintergrund und mit schwarzer Schrift.
echo %ESC%[30mDie Zeilen werden hier erst einmal ohne zu blinken angezeigt.
echo %ESC%[31mDiese Zeile ist rot. ESC-Wert 31m.
echo %ESC%[32mDiese Zeile ist grn. ESC-Wert 32m.
echo %ESC%[33mDiese Zeile ist gelb. ESC-Wert 33m.
echo %ESC%[34mDiese Zeile ist dunkelblau. ESC-Wert 34m
echo %ESC%[35mDiese Zeile ist violett. ESC-Wert 35m.
echo %ESC%[36mDiese Zeile ist hellblau. ESC-Wert 36m.
echo %ESC%[37mDiese Zeile ist hellgrau. ESC-Wert 37m.
echo %ESC%[90mDiese Zeile ist normalgrau. ESC-Wert 90m.
echo %ESC%[91mDiese Zeile ist hellrot. ESC-Wert 91m.
echo %ESC%[92mDiese Zeile ist hellgrn. ESC-Wert 92m.
echo %ESC%[93mDiese Zeile ist hellgelb. ESC-Wert 93m.
echo %ESC%[94mDiese Zeile ist normalblau. ESC-Wert 94m.
echo %ESC%[95mDiese Zeile ist hellviolett. ESC-Wert 95m.
echo %ESC%[96mDiese Zeile ist trkis. ESC-Wert 96m.
echo %ESC%[30m
echo Der ESC-Wert 30m setzt die Schriftfarbe wieder auf schwarz ohne zu blinken.
echo Der ESC-Wert 37m setzt die Schriftfarbe auf normal weiss.
echo Der ESC-Wert 0m resettet die ESC ANSI Einstellungen.
echo.
pause
cls
echo %ESC%[5m
echo %ESC%[30mEine normale Zeile auf weissem Hintergrund und mit schwarzer Schrift.
echo %ESC%[30mDie Zeilen werden hier blinkend angezeigt. ESC-Wert 5m.
echo %ESC%[31mDiese Zeile ist rot. ESC-Wert 31m. Und sie blinkt.
echo %ESC%[32mDiese Zeile ist grn. ESC-Wert 32m. Und sie blinkt.
echo %ESC%[33mDiese Zeile ist gelb. ESC-Wert 33m. Und sie blinkt.
echo %ESC%[34mDiese Zeile ist dunkelblau. ESC-Wert 34m Und sie blinkt.
echo %ESC%[35mDiese Zeile ist violett. ESC-Wert 35m. Und sie blinkt.
echo %ESC%[36mDiese Zeile ist hellblau. ESC-Wert 36m. Und sie blinkt.
echo %ESC%[37mDiese Zeile ist hellgrau. ESC-Wert 37m. Und sie blinkt.
echo %ESC%[90mDiese Zeile ist normalgrau. ESC-Wert 90m. Und sie blinkt.
echo %ESC%[91mDiese Zeile ist hellrot. ESC-Wert 91m. Und sie blinkt.
echo %ESC%[92mDiese Zeile ist hellgrn. ESC-Wert 92m. Und sie blinkt.
echo %ESC%[93mDiese Zeile ist hellgelb. ESC-Wert 93m. Und sie blinkt.
echo %ESC%[94mDiese Zeile ist normalblau. ESC-Wert 94m. Und sie blinkt.
echo %ESC%[95mDiese Zeile ist hellviolett. ESC-Wert 95m. Und sie blinkt.
echo %ESC%[96mDiese Zeile ist trkis. ESC-Wert 96m. Und sie blinkt.
echo %ESC%[30m
echo Der ESC-Wert 30m setzt die Schriftfarbe wieder auf schwarz ohne zu blinken.
echo Der ESC-Wert 37m setzt die Schriftfarbe auf normal weiss.
echo Der ESC-Wert 0m resettet die ESC ANSI Einstellungen.
echo.
pause
cls
color 0f
echo Man beachte den Farbunterschied der Schriftfarben zwischen weissem und schwarzem Hintergrund.
echo Eine normale Zeile auf schwarzem Hintergrund und mit weisser Schrift in fett (BOLD).
echo Die n„chsten zwei Zeilen werden hier erst einmal ohne zu blinken angezeigt.
echo.
echo %ESC%[93mDiese Zeile ist hellgelb. ESC-Wert 93m.
echo %ESC%[96mDiese Zeile ist trkis. ESC-Wert 96m.
echo %ESC%[97m
echo Der ESC-Wert 97m setzt die Schriftfarbe wieder auf weiss und in fett (Bold) ohne zu blinken.
echo Der ESC-Wert 0m resettet die ESC ANSI Einstellungen.
echo.
pause
echo %ESC%[0m
cls
color 0f
echo Man beachte den Farbunterschied der Schriftfarben zwischen weissem und schwarzem Hintergrund.
echo Eine normale Zeile auf schwarzem Hintergrund und mit weisser Schrift in fett (BOLD).
echo Die n„chsten zwei Zeilen werden hier blinkend angezeigt. ESC-Wert 5m.
echo %ESC%[5m
echo %ESC%[93mDiese Zeile ist hellgelb. ESC-Wert 93m. Und sie blinkt.
echo %ESC%[96mDiese Zeile ist trkis. ESC-Wert 96m. Und sie blinkt.
echo %ESC%[0m
echo %ESC%[97mDer ESC-Wert 97m setzt die Schriftfarbe wieder auf weiss und in fett (Bold) ohne zu blinken.
echo %ESC%[97mDer ESC-Wert 0m resettet die ESC ANSI Einstellungen.
echo.
pause
exit
 

Anhänge

  • Farbpalettentest.txt
    3,9 KB · Aufrufe: 55
  • Farbpalettentest.zip
    903 Bytes · Aufrufe: 46
Anzeige
Stimmt... in Powershell habe ich das auch noch nicht hinbekommen.
Aber in DOS mit Windows 11 funktioniert es,
In der RP, DEV, Beta und normalen Version. Windows 10 habe ich nicht mehr und bei Windows 7 weiss ich,
dass farbige Zeilen zwar möglich sind, aber eben nicht blinkende Zeilen.
Bei Powershell mit blinkenden Zeilen werde ich noch mal rumgoogeln!
Wäre natürlich witzig, wenn es da auch Möglichkeiten geben würde...
 
Zuletzt bearbeitet:
Aber in DOS mit Windows 11 funktioniert es,
Das kann ich wie folgt bestätigen:

Animation.gif


Getestet habe ich mit Windows 11 23H2 (Build 22631.3880).

Windows 10 habe ich nicht mehr ...
Unter Windows 10 22H2 (Build 19045.4651) funktionieren die blinkenden Zeilen in der Eingabeaufforderung nicht.
 
Der Typ, der das hier programmierte, hat echt geraucht.
Wahnsinn:
Code:
@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

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

rem 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

und das hier

Code:
@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 Farbnummer 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

und als gesamte Datei
Code:
@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

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

rem 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

cls
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 Farbnummer 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

Also... ein paar Kleinigkeiten kann ich ja auch schon, aber Das?
Da kann ich nur sagen... Hut ab... und Wow! HOLLADIEWALDFEE...
 

Anhänge

  • Test_Farbe_1_Internetseite_Gute_Frage.txt
    3,4 KB · Aufrufe: 29
  • Test_Farbe_1_Internetseite_Gute_Frage.zip
    3,8 KB · Aufrufe: 30
  • Test_Farbe_2_Internetseite_Gute_Frage.txt
    5 KB · Aufrufe: 28
  • Test_Farbe_gesamt_Internetseite_Gute_Frage.txt
    8,3 KB · Aufrufe: 31
  • Test_Farbe_gesamt_Internetseite_Gute_Frage.zip
    3,3 KB · Aufrufe: 33
Zuletzt bearbeitet:
1. Nutzung auf eigene Gefahr.
2. Aministrative Rechte sind erforderlich.

3. Um aber auch hier den Forenregeln genüge zu tun, extra eine Warnung:

Eine Veränderung der Registry kann das Betriebssystem unbrauchbar machen!!!

4. Die PSGetSID.exe ist von GitHub und wird bei dieser Testdatei für das Aufbröseln der User-ID benötigt.
5. Bitte dran denken: Es handelt sich nur um eine technische Spielerei... mehr nicht!
6. Geht man in die tieferen Einstellungen für die Personalisierung der Taskleiste, kann man in dieser Testdatei
die Veränderungen sehen und angezeigt bekommen. Was eingeschaltet ist blinkt grün, was ausgeschaltet ist, blinkt rot.
7. Auch hier gilt: Erfolgreich getestet auf Windows 11 in versch. Versionen. Nicht auf Windows 10 oder 7.

1720995388797.jpeg



MfG

Jürgen Klein
 

Anhänge

  • Kerndaten_und_Benachrichtigungseinstellungen_abfragen.zip
    141,8 KB · Aufrufe: 29
Zuletzt bearbeitet:
Naja, solche Spielchen hab ich schon in den neunzehnneunzigern unter MS-Dos gespielt:

Dos622.jpg

Das war mein originales Prompt unter MS-Dos 6.22, das als "prompt $e[s$e[f$e[43;33m$d $t$h$h$h$h$h$h $p$g $e[K$k$h$e[u$e[44;33;1m$e[31;1m$g$e[0m$e[44;33;1m" so ab 1992/93 in meiner Autoexec.bat stand. Blinkende Zeilen waren auch damals schon mit ANSI-Escape nur schwer zu realisieren. Dafür wurde meine Titelzeile tatsächlich bei jedem Verzeichnichswechsel aktualisiert und das aktuelle Verzeichnis stand in der Titelzeile. Ausserdem wurde bei jedem Schlag mit Enter auch die Anzeige der Uhrzeit aktualisiert.
 
Jepp
Ich habe meine ersten DOS-Erfahrungen schon bei der AFK Philips in KR 1983 gemacht!
Etwas Unangenehmes ist mir dann doch noch aufgefallen.
Die Windows Chioce.exe aber auch die Keyin.exe (siehe Datei-Anhang) zerstören
unterstrichene Zeilen in einem DOS-Fenster, sobald man an die exe.-Datei in der Batch-Datei rankommt.
Dann verschwindet zwar nicht die Zeile, aber der Unterstrich geht weg. Siehe Script Zeile 10 hier:
Code:
@echo off
chcp 65001 >nul & rem Umlaute anzeigen
color f0
for /f %%. in ('"echo prompt $E|cmd"') do set "ESC=%%."
echo %ESC%[95;4;107mHallo Vordergrund leuchtend Rot,Unterstrichen,Hintergrund Standard
echo.
echo %ESC%[24m
echo %ESC%[97;44mHallo Vordergrund leuchtend Weiß,Hintergrund blau, nächste Zeile komplett Standard%ESC%[0m
echo.
pause
echo.
echo %ESC%[30;107mwas passiert mit der unterstrichenen Linie?
echo.
pause
exit
Tauscht man jetzt die Pause Funktion gegen die CHOICE.exe mit entsprechenden Prametern
oder gegen die Keyin.exe aus, dann ist der entsprechenden Zeile der Unterstrich weg.
Mit der set /P Funktion oder Pause Funktion bleibt der Unterstrich nach einem Fortlaufen
des Programms in der Zeile erhalten. Aberwitzig...
Pausefunktionstest:
1721171259310.jpeg


Keyin.exe Datei Funktionstest:

1721171295324.jpeg


Ach und noch etwas
Die keyin.exe ist bei sämtlichen Online Virenscanner Tests unauffällig, also grün gewesen.
Die keyin.exe ist einfach nur ein Tastaturunterbrecher-Programm. Danach kann man mit errorlevel Codes
in einer Batch oder CMD-Datei weiter arbeiten.

z.B. if errorlevel 13 if not errorlevel 14 goto weiter... "errorlevel 13" ist die Taste Enter.
z.B. if errorlevel 27 if not errorlevel 28 exit... "errorlevel 27" ist die Taste ESC.
z.B. if errorlevel 65 if not errorlevel 66 goto Abschnitt1... "errorlevel 65" ist die Taste groß A.
z.B. if errorlevel 97 if not errorlevel 98 goto Abschnitt2... "errorlevel 97" ist die Taste klein a.
Siehe Datei-Anhang ASCII-Hilfe.zip

Das Ganze kann ja mal Jemand so unter Windows 11 ausprobieren mit Austausch in Choice.exe oder Keyin.exe.

Ein Feedback wäre nett!
 

Anhänge

  • keyin.zip
    710 Bytes · Aufrufe: 18
  • ASCII-Hilfe.zip
    2,5 KB · Aufrufe: 18
Zuletzt bearbeitet:
Zur Choice.exe habe ich noch was absolut Gefährliches herausgefunden:
Mach mal aus dem hier ´ne Batch-Datei

Code:
@echo off
cls
:menu1077
start choice /c 1234567890KEM /n /m "Change a menu option, press 0 to start the process, or 9 to exit: "
goto menu1077

Die Kiste hängt und macht andauernd neue DOS-Fenster auf. Da hilft nur RESET oder Netzstecker ziehen.
An den Taskmanager kommt man nicht mehr ran.
Ganz toll.
 
Der Typ, der das hier programmierte, ...
Hier meinst du offensichtlich den User Erzesel (Experte für Computer, programmieren, Batch) aus folgendem Thema:

Die Windows Chioce.exe aber auch die Keyin.exe (siehe Datei-Anhang) zerstören unterstrichene Zeilen in einem DOS-Fenster, sobald man an die exe.-Datei in der Batch-Datei rankommt.
Für den Befehl choice kann ich das nicht bestätigen. Habe mir dazu ein Script Test.cmd erstellt und wie folgt ausgeführt:

Animation.gif


Dies in Anlehnung an dein anderes Thema:

Leider finde ich zu deiner Anwendung Keyin.exe keine Dokumentation, sodass ich nur anhand deiner früheren Scripts wie folgt testen konnte:
Code:
:Menu
...
...
...
echo Geben Sie Ihre Wahl ein:
keyin
if errorlevel 51 goto :Benachrichtigung
if errorlevel 50 goto :Updates
if errorlevel 49 goto :Kerndaten
if errorlevel 27 exit

Funktioniert genau wie mit dem Befehl choice, siehe oben.
 
Zuletzt bearbeitet:
Na das mit der Choice.exe wäre ja schon mal hilfreich.
Aber trotzdem bin ich der Meinung, dass wir uns da ein wenig missverstehen.
Siehe Beitrag #12 von mir!
Danke für Deine Ausführungen. Stell doch mal den Code für die Choice.exe zum Nachvollziehen für mich hier rein.
Aber die Keyin.exe stammt nicht von mir und ist besser bekannt als reply.exe.
Es gibt dafür ein Batch-Script was ausgeführt dann automatisch die reply.exe erzeugt.
Ich suche mal danach... Die Exe-Datei hat am Ende eine Größe von genau 1536 Byte.
Aber gehe ich dann also recht in der Annahme,
dass die keyin.exe unterstrichene Zeilen in der Batchdatei "kaputt" macht oder nicht?

Des Weiteren sollte man bei einer Fehleingabe bei der Keyin.exe immer Folgendes bedenken.

Code:
:Menu
...
...
...
echo Geben Sie Ihre Wahl ein:
:menu10077
keyin
if errorlevel 51 if not errorlevel 52 goto Benachrichtigung
if errorlevel 50 if not errorlevel 51 goto Updates
if errorlevel 49 if not errorlevel 50 goto Kerndaten
if errorlevel 27 if not errorlevel 28 exit
goto menu10077

Durch die Eingabe der Zeile goto menu10077 wird verhindert, dass bei einer Taste die nicht über den errorlevel Code
definiert ist, die Batch-Datei einfach mit der nächsten Befehlszeile weiter läuft..
Soll heissen
der errorlevel code 27 ist ja zum Beispiel die ESC-Taste
Drücke ich jetzt irgendeine Taste (z.B. die Taste a) die nicht definiert ist,
springt die Batchdatei ungewollt in die nächste Befehlszeile.
Ausserdem ist nach dem goto befehl der doppelpunkt vor dem Sprungziel absolut unnötig!
In der Zeile, in der dann das Sprungziel steht, klar,
da muss der Doppelpunkt vor dem Sprungzielnamen gesetzt werden.

Auch der if not errorlevel Befehl mit einer Nummer höher als der if errorlevel Befehl hat hier seinen Sinn und Zweck:
Bei vielen Errorlevel Codes, insbesondere bei vielen aufeinander folgenden errorlevel Codes, kann die Batchdatei über die Keyin.exe gesteuert, u. U. nicht mehr genau aufbröseln welche Taste denn nun wirklich gedrückt wurde.

Deshalb die Bedingung: if errorlevel 51 if not errorlevel 52 goto Sprungziel
Das zeigen halt die Erfahrungen, die ich so mit der keyin.exe gemacht habe.
Man sieht: die keyin.exe alias reply.exe hat ihre Vor und Nachteile!

Link zum Download der Reply.exe

Und hier die CMD-Datei die die reply.exe erzeugt als Code

Code:
@echo off
REM creation of reply.exe a utility for get a user input key and know the value of it
setlocal enabledelayedexpansion

set "out=reply.cab"
>"!out!" type nul

echo creating reply.exe ...
call :w "4D53434600000000B8010000000000002C00000000000000030101000100"
call :w "0000000000004600000001000100000600000000000000003E44B31C2000"
call :w "7265706C792E65786500F8C5FE566A010006434BF38D9AC0C0CCC0C0C002"
call :w "C4FFFF3330EC6080000706C2A00188F9E477F1316CE13CABB883D1E7AC62"
call :w "484666B14241517E7A5162AE4272625E5E7E894252AA4251699E42669E82"
call :w "8B7FB0426E7E4AAA1E2F2F970AD48C005706061F462614731F30F0337333"
call :w "B2A15A2600C50A50D781D84C10773330206806038878395009334CA30032"
call :w "0DA72000689E0D117E2515D800CD15C123AF57925A51020D43985F185083"
call :w "01E4B404BD94C49244207B015400AC8605551DD0AB07C8756768E7D3C637"
call :w "20F326BC8804929DAE7FBA5DFFB41EE06F1105F2763C0012DDBE7F2C4FF0"
call :w "B7B002992FF980C40B4320D178808111A63AE0853A50A4F908CBC9C360D3"
call :w "40C64E00A7A3801720534E1E06A52D551B050730ED00A53D14884963A380"
call :w "B6204001C14E5180A4DB1824B17A20DB4301BBDE7CA0780554AE4701B758"
call :w "6E71597251895E4A4E0E90139F9E5A929C0164A45664963064A716E5A5E6"
call :w "181B41255D81620145F9C9A9C5C5A35143170000"
del *.chr
expand "!out!" reply.exe >nul
del "!out!"

echo Press a key ...
reply.exe
echo Key pressed: %errorlevel%
pause

goto :eof

:genchr
REM This code creates one single byte. Parameter: int
REM Teamwork of carlos, penpen, aGerman, dbenham
REM Tested under Win2000, XP, Win7, Win8
set "options=/d compress=off /d reserveperdatablocksize=26"
if %~1 neq 26  (type nul >t.tmp
makecab %options% /d reserveperfoldersize=%~1 t.tmp %~1.chr >nul
type %~1.chr | (
(for /l %%N in (1 1 38) do pause)>nul&findstr "^">temp.tmp)
>nul copy /y temp.tmp /a %~1.chr /b
del t.tmp temp.tmp
) else (copy /y nul + nul /a 26.chr /a >nul)
goto :eof

:w
set "line=%~1"
::get length upto 60 characters
::Function for get the length originally writted by jeb. Modified.
(set "z=0" &set "s=a!line!" &for %%a in (
64 32 16 8 4 2 1) do (set /a "z|=%%a"
for %%b in (!z!) do if "!s:~%%b,1!"=="" set /a "z&=~%%a"))
set /a "limit=z-2"
for /l %%# in (0,2,%limit%) do (
set /a "chr=0x!line:~%%#,2!"
if not exist !chr!.chr call :genchr !chr!
copy /y "!out!" /b + !chr!.chr /b "!out!" >nul
)
goto :eof

Zu beachten ist hier noch, dass es zwei Varianten der reply.exe gibt.
Da geht es wohl um ASCII Sonderzeichen!

Noch eine Info
Ich habe die Reply.exe einfach in keyin.exe umbenannt,
was aber der Funktion in einer Batchdatei keinen Abbruch tut!
 
Zuletzt bearbeitet:
Bei diesem Code hier verschwindet trotzem erst einmal die unterstrichene Zeile!

Code:
Echo off
cls
chcp 65001 >nul & rem Umlaute anzeigen


: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
CHOICE /C JNA /M "Drücken Sie J für Ja, N für Nein oder A für Abbrechen."


pause

Erst beim Erreichen der Pausefunktion ist die unterstrichene Zeile wieder sichtbar.
Das ist aber nicht der Sinn und Zweck.
Die Choice Funktion sollte das ja auch ermöglichen... nur wie?
Und da kannst Du Dich von mir aus auf den Kopf stellen.
Die Choice und keyin.exe machen erst einmal eine unterstrichene Zeile kaputt!
Beweis: Siehe Bild ganz unten!
Wird die Pause Funktion (sprich der Befehl Pause) im Script komplett entfernt und durch die CHOICE.exe
oder keyin.exe ersetzt, dann fehlt der Unterstrich in jeder Zeile wo ich die %ESC%[4m angebe!
Ich habe es jetzt mit mehreren unterschiedlichen Parametern in der CHOICE.exe versucht!
Noch einmal für alle erklärt.
Erzeuge ich in einer Batch bzw. CMD-Datei eine Zeile mit unterstrichenem Text ( %ESC%[4m ) ,
dann verschwindet der Unterstrich in der Zeile sofort, wenn unter dieser Zeile direkt
der CHOICE.exe oder keyin.exe Befehl erfolgt.
Liegt unter der unterstrichenen Zeile direkt der Pause oder SET /P Befehl bzw. die Funktion,
bleibt nur dann der Unterstrich in der unterstrichenen Zeile erhalten!

1721569062043.jpeg
 
Zuletzt bearbeitet:
Das, was Du Dir da zusammen gefügt hast, aus meinen Batchscripten
lässt für mich den Schluß zu, das Du nach jedem abgearbeitetem Menüpunkt
(z.B der Kerndatenabfrage) ja die Zeile mit dem Befehl PAUSE setzt.
Beweis
Deine Animation
Da steht bei jedem ausgeführtem Abschnitt
Drücken Sie eine beliebige Taste, um fortzufahren ...
So
Füge in alle dieser Abschnitte Deines Scripts mal eine unterstrichene Zeile ein.
Und dann ersetze in Deinem Script in allen Abschnitten mal die Pause-Funktion
durch die Keyin.exe oder die Choice.exe.
Wenn Du in diesen Teilabschnitten des Scriptes eine Zeile mit unterstrichenen Abschnitten hast oder
die ganze Zeile unterstrichen ist, dann fehlt der Unterstrich. BASTA.PUNKT.

Ach und noch etwas

Was nach dem Befehl keyin.exe oder choice.exe passiert, ist erst mal völlig irrelevant.
Die keyin.exe oder Choice.exe soll ja nur den Weiterlauf der Batch-Datei anhalten.
Bis genau zu dem Zeitpunkt, an dem ich eine Taste auf meiner Tastatur drücke.
Sinn und Zweck ist ja ähnlich der Pause-Funktion, dass ich zunächst einmal
den Text in den Echo-Zeilen durchlesen kann.
 
Zuletzt bearbeitet:
Wow, 3 Beiträge hintereinander, muss ich erst einmal verarbeiten und testen.
 
Zuletzt bearbeitet:
Weil mich sowas eben sehr mitnimmt und beschäftigt.
Vor allen Dingen dann. wenn ich physikalisch nachweisen kann, dass Das, was ich in Beitrag #8
schon gepostet habe, wahr ist!
So
Und in Beitrag #12 steht ja ein Script.
Aus diesem Script eine Batch-Datei gemacht und mit administrativen Rechten ausgeführt, zeigt
sich keine unterstrichene Zeile bei Benutzung der Choice.exe oder keyin.exe (alias reply.exe).
Bei Benutzung der der Pause Funktion oder der SET /P Funktion zeigt sich mindestens eine unterstrichene Zeile.
 
Zuletzt bearbeitet:
Aber trotzdem bin ich der Meinung, dass wir uns da ein wenig missverstehen.
Hier gebe ich dir recht, dass ich dich da etwas missverstanden habe. Wie man in Beitrag #10 sehr gut sieht, habe ich mit dem Befehl choice getestet und da aber erst mit unterstrichenen Zeilen, nachdem der Befehl choice jeweils ausgeführt wurde. Das Gleiche gilt für keyin.exe alias reply.exe.

Anhand deines Scripts aus Beitrag #12 habe ich aber 2 alternative Vorschläge:

Code:
Echo off
cls
chcp 65001 >nul & rem Umlaute anzeigen

: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
echo Drücken Sie doppelt auf J für Ja, N für Nein oder A für Abbrechen: 
pause >nul
CHOICE /C JNA /N >nul
if errorlevel 3 goto exit
if errorlevel 2 goto :init
if errorlevel 1 goto :init
Code:
Echo off
cls
chcp 65001 >nul & rem Umlaute anzeigen
cd /d "%~dp0"

: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
echo Drücken Sie doppelt auf J für Ja, N für Nein oder A für Abbrechen:
pause >nul

:keyin
keyin
if errorlevel 97 if not errorlevel 98 exit
if errorlevel 110 if not errorlevel 111 goto :init
if errorlevel 106 if not errorlevel 107 goto :init
goto :keyin

Stell doch mal den Code für die Choice.exe zum Nachvollziehen für mich hier rein.
Das lasse ich lieber, am Ende ärgere ich mich wieder wie beim letzten Mal in unserer Unterhaltung.

Weil mich sowas eben sehr mitnimmt und beschäftigt.
Das wollte ich nicht und entschuldige mich dafür, dass ich dich zuvor missverstanden habe.
 
Anhand deines Scripts aus Beitrag #12 habe ich aber 2 alternative Vorschläge:
Mit choice.exe geht es sogar noch etwas eleganter:

Code:
Echo off
cls
chcp 65001 >nul & rem Umlaute anzeigen

: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
echo Drücken Sie J für Ja, N für Nein oder A für Abbrechen:
ver >nul
CHOICE /C JNA /N >nul
if errorlevel 3 goto exit
if errorlevel 2 goto :init
if errorlevel 1 goto :init
 
Danke Dir und na siehste et jeeeht doch!

Die Lösung ohne die Choice.exe einzusetzen gefällt mir am Besten,
der einzige Haken ist aber dann, ich muss u. U. eine Taste 2 mal drücken, bis es dann weiter geht.
Das liegt dann an der Doppelfunktion Pause >nul und der keyin.exe...
Tja und mit der Choice.exe geht eine Abfrage der Taste ESC auch nicht. Menno.
Pause >nul hatte ich Anfangs ehrlich gesagt meine Zweifel...
Ich kannte den Befehl natürlich auch... ist mir aber im Traum nicht eingefallen ihn vor die Keyin.exe zu setzen.
Arrrrgh... :mad:
Die keyin.exe nutze ich seit mehr als zwanzig Jahren, damals noch in einer 16 und 32 Bit Variante.
Aber die Funktion bleibt die selbe: unterbreche den Fortlauf einer Batchdatei bis zu einem Tastendruck.
Bei der Choice.exe mit >nul zu arbeiten und dass dann die unterstrichene Zeile erhalten bleibt. Wow!:eek:
Das hast Du aber sicherlich auch nur durch try and error herausbekommen. Oder?
Wer weiss denn sowas. Jetzt sag nicht Du! Dann ist Schluss mit Lustig! ;)
 
Zuletzt bearbeitet:
Bei der Choice.exe mit >nul zu arbeiten und dass dann die unterstrichene Zeile erhalten bleibt. Wow!:eek:
Das hast Du aber sicherlich auch nur durch try and error herausbekommen. Oder?
Wer weiss denn sowas. Jetzt sag nicht Du! Dann ist Schluss mit Lustig! ;)
Doch, habe einfach getestet und mir gefiel nicht, dass jeder Druck auf J oder N auch ausgegeben wurde.

Eine Frage habe ich noch zu deinem Script in Beitrag #6. Dort fragst du mit folgenden Befehlen ab, ob das Info-Center in der Taskleiste ein oder ausgeschaltet ist:

Code:
FOR /F "tokens=2*" %%t IN ('reg query "HKCU\SOFTWARE\Policies\Microsoft\Windows\Explorer" /v "DisableNotificationCenter"') DO SET "wert22=%%~u"
if %errorlevel% equ 1 (SET run6hm=bla) &goto weiter466 else (set run6hm=nee) &goto weiter465
if %run6hm% equ bla echo %ESC%[32mDas Info-Center in der Taskleiste ist momentan eingeschaltet.
if %run6hm% equ nee echo %ESC%[31mDas Info-Center in der Taskleiste ist momentan ausgeschaltet.

Dabei handelt es sich aber um eine Gruppenrichtlinie, die nicht gesetzt ist, wenn man das Info-Center wie folgt ein- oder ausschaltet:

1. Windows 10

Ecksymbole_W10.png (Zum Vergrößern anklicken)

2. Windows 11 mit StartAllBack, siehe auch Beitrag #10

Ecksymbole.png (Zum Vergrößern anklicken)

Auf jeden Fall sieht man ja, dass das Info-Center nicht da ist, aber hier könnte ja auch ein Fehler vorliegen, weshalb es nicht angezeigt wird. Bislang habe ich noch nicht herausgefunden, wo dies gespeichert wird.
 
Zuletzt bearbeitet:
Anzeige
Oben