Kann man in einer Batchdatei denn Text Langsam auftauchen lassen?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

man kann ...

@echo off
setlocal enableDelayedExpansion
  rem umlaute verfügbar machen:
chcp 65001 >nul 
  rem Cursor ausschalten...
powershell -c "&{[System.Console]::CursorVisible=$False}"
  rem Fenstergröße
mode con  cols=80 Lines=20

  rem Schreibvezögerung 0..2147483647 (sinvoll bis 100000) abhängig von der geschwindigkeit des Rechners!!! 
set "Delay=1000"


:main
color 0b
cls
  rem Einschränkung Ausrufezeichen ! werden  nicht  angezeigt...
  rem &|<> sind nicht erlaubt!!!
echo:
call :GhostType "Lorem ipsum" dolor sit amet,consectetuer adipiscing elit. 
call :GhostType Aenean commodo ligula eget dolor. Aenean massa. 
echo:
call :GhostType Cum sociis natoque penatibus et magnis dis parturient montes, 
call :GhostType nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, 
call :GhostType pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, 
call :GhostType fringilla vel, aliquet nec, vulputate eget, arcu. 
echo:
  rem demo umlaute
call :GhostType Überhaupt ist etwas , daß die Ähnlichkeit unmöglich macht nur Blöd. 
echo:
call :GhostType ...und tschüß...Erzesel
echo.

pause
::main End
exit /b

:::::::::::::::::::: Subruotinen ::::::::::::::::::::::
  rem hier  nichts ändern...
:GhostType
    if "%~1"==""  echo Error:no String to type... &exit /b
      rem erzeuge Backspace (Variable %___BS%)
    if not defined bs  for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "___BS=%%a"
    set "___line=%*"
      rem GhostType verträgt kein " im String also wird es durch “ ersetzt... damit kann man leben
    set "___line=%___line:"=“%"
:___loop
      rem Zeichen  für Zeichen aus dem String lesen
    set "___char=!___line:~%___count%,1!"
      rem Batch-Trick: Ausgabe ohne Linefeed mit set /p "= string"<nul
    if not "%___char%"==""   set /p "=.%___BS%%___char%" <nul
      rem Verzögerungsschleife: mach %Delay% mal nichts
    for /l %%b in (0,1,%Delay%) do (call)
      rem wenn  kein Buchstabe  mehr vorhanden zurück zum Hauptprogramm
    if "%___char%"=="" echo: & set "___count=0" & exit /b
      rem nächstes  Zeichen
    set /a ___count+=1
goto :___loop
exit /b

Das ganze ist mit erheblichen Tricks verbunden... Versuche garnicht erst etwas an der GhostType-Routine zu verändern... (außer die Kommentare zu entfernen).

folgende Zeichen sind in Text nicht erlaubt: %&|<>!

Batch unterliegt diversen Beschränkungen bezüglich verwendbaren Zeichen.

Da dieses Script Zeichen einzeln schreibt, funktioniert das Maskieren von Sonderzeichen nicht.

Wenn du mit den Einschränkungen Leben kannst, ok, ansonsten verwende eine Prorammiersprache , welche keine Einschränkungen bezüglich Zeichen hat.

https://www.youtube.com/watch?v=bvSIovUmRhQ

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

Blackbanana33 
Beitragsersteller
 20.10.2019, 00:10

Dankeschön ich hoffe ich schaffe es da durch zu Blicken XD

0
Erzesel  20.10.2019, 02:59
@Blackbanana33

Was Du ändern kannst:

  • Mit mode con cols=80 Lines=20 stellst Du ein wie Breit und Hoch das Fenster sein soll.
  • color 0b legt Vordegrund- und Hintergundfarbe fest : jeweils 0 bis f. https://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Befehle#COLOR
  • Mit cls (clear screen) wird der Bildschirm gelöscht.
  • echo: erzeugt eine leere Zeile.
  • set "Delay=1000" legt die Pause die nach jedem Zeichen eingelegt wird fest
  • call :GhostType Beliebiger Text.......... schreibt eine Zeile. Nicht erlaubt in der Zeile sind die Zeichen %&|<>!.
  • Zeilen die mit rem beginnen sind lediglich Kommentare , und können entfernt werden

...viel mehr ist nicht zu beachten.

ansonsten kannst Du zwischen :main und ::main End scripten wonach Dir ist....

1
Blackbanana33 
Beitragsersteller
 20.10.2019, 14:08
@Erzesel

Vielen Dank die ersten $waren mir bekannt aber letzten Nicht. Danke^^

0