Batch Text: Jeden Buchstaben einzel ausgeben.

1 Antwort

@echo off
Setlocal EnableDelayedExpansion
set Zeichenfolge=[Hier den gewünschten Text]
FOR /F "delims=:" %%A IN ('^(echo %Zeichenfolge%^&echo.^)^|findstr /O $') DO set /a StringLength=%%A - 4
FOR /L %%A IN (0,1,%StringLength%) DO (
    set /p ".=!Zeichenfolge:~%%A,1!" <nul
    ping localhost -n 1 >nul
    ping localhost -n 1 >nul
    ping localhost -n 1 >nul
)
echo.
pause
exit

"Setlocal EnableDelayedExpansion" ermöglich das Aufrufen von Variablen nicht nur mit "%var%", sondern auch "!var!", sodass man eine Variable in einer Variable benutzen kann (z.B. "!var1%var2%!").

Den SET-Befehl kannst du anpassen wie es dir beliebt, z.B. auch mit /P eine Benutzereingabe erfragen.

Der erste FOR-Befehl findet in Kombination mit dem FINDSTR-Befehl die Länge der von dir festgelegten Zeichenfolge raus und speichert sich in "StringLength". Das "/O" steht dabei für "offset" (grob übersetzt "Zeichenposition") und das "$" bewirkt, dass das Ende der Zeichenfolge gesucht wird. Das Ergebnis hier ist eigentlich um "-1" falsch, aber das wird für den zweiten FOR-Befehl so benötigt.

Der zweite FOR-Befehl gibt jedes Zeichen einzeln aus in der aktuellen Zeile. Das wird über "SET /P ".=Text" <nul" ermöglich. Die von "/P" geforderte Eingabe wird aus dem Nichts (NUL) eingelesen. Dieses Nichts hat auch keinen Zeilenumbruch, sodass der CMD-Cursor in der aktuellen Zeile bleibt. Dadurch kann man mehrere geteilte Texte (wie hier mehrere einzelne Buchstaben) in dieselbe Zeile schreiben. Zwischen jedem Zeichen sind 3 einzelne PINGs Verzögerung. Die Menge der Pings kannst du anpassen.

Der ECHO.-Befehl bewirkt lediglich einen Zeilenumbruch, damit der Text aus PAUSE nicht in die Zeile mit ZEICHENFOLGE geschrieben wird.