Kann man in einer Batchdatei denn Text Langsam auftauchen lassen?
In einer Batchdatei kann man ja bekanntlich mit Echo Text einblenden lassen. Der Text taucht dabei auf einmal auf und ich möchte, wie oben schon steht, das der Text nach und nach auftaucht. Also Wort für Wort oder noch besser Buchstabe für Buchstabe.
Weiß jemand ob und wie das Funktioniert?
1 Antwort
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.
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....
Vielen Dank die ersten $waren mir bekannt aber letzten Nicht. Danke^^
Dankeschön ich hoffe ich schaffe es da durch zu Blicken XD