Text in cmd ausgeben?

3 Antworten

Bei

FOR /?

bekommst du angezeigt, wie man Zählschleifen realisiert und wie man Teilzeichenketten aus Zeichenketten extrahiert. Für die Schleife wäre allerdings vermutlich eine Batch-Datei geeigneter.

Im Internet ist auch beschrieben, wie man Zeichen ausgibt, ohne dass danach ein Zeilenumbruch folgt. Dazu verwendet man

SET /P {Text}=<NUL

oder ähnlich

Zu Zeitverzögerung findet sich auch was im Internet, notfalls CHOICE

verstehe zwar nich so viel von den Begriffen aber werde des mal googeln und durchlesen, danke:)

0

Mein Code dafür ist dann doch etwas komplexer geworden, da bei meiner normalen Methode Buchstaben einzeln auszugeben (

echo.|set /P "=A"

) Leerzeichen am Anfang getrimmt werden und somit keine Leerzeichen alleine ausgegeben werden können.

Folgender Code sollte dann aber auch mehr Zeichen unterstützen:

(Die Variable string enthält deine auszugebende Zeichenkette, Zeilenumbrüche realisierst du mithilfe von \n)

@echo off & setlocal enableDelayedExpansion
set "string=encrypt -all\nEncrypting your files...\nFinished.\nTesting some characters now:=?~+^&><|)(\/"

:LOOP
if not defined string goto hold
set "current_char=%string:~0,1%"
set "next_2_chars=%string:~0,2%"
if "%next_2_chars%"=="\n" (
	echo.
	set "string=%string:~2%"
	goto loop
)

for /f %%A in ('copy /Z "%~dpf0" nul') do set EOL=%%A^


::Die Leerzeile hier nicht entfernen!
<nul set /p "=x!EOL!!current_char!" >ln.tmp
findstr /v $ ln.tmp
del ln.tmp
set "string=%string:~1%"
goto loop

:HOLD
pause>nul

Sollte von der Geschwindigkeit her eigentlich angemessen sein, habe versucht mithilfe von

ping 192.0.2.0 -n 1 -w 80>nul

kleine Verzögerungen einzubauen, aber leider ist ping für diesen Zweck sehr unzuverlässig. Und Erweiterungen wie BatBox lohnen sich für eine minimale Verzögerung dann glaub ich auch nicht.

Ganz so einfach mit for ist es nicht abgetan, um Zeichen einzeln mit Pause dazwischen auszugeben...

Das würde mit einer Hochsprache besser gehen..

Für Batch muss man etwas cleverer vorgehen.

In folgender Demo zerlegt die Subroutine ltype eine übergeben Textzeile in einzelne Buchstaben.

Mit echo kann man nur ganze Zeilen auf einen Ruck ausgehen. Das scheidet schon mal für unser Vorhaben aus.

Set /p wartet nach dem fragetext ohne in eine neue Zeile zu wechseln . Mit einem nul-input simulieren wir eine Eingabe und fertig ist ein selbstgebasteltes Echo ohne Zeilenvorschub.

Delay ist ganz primitiv einfach eine dummyschleife die x-mal durchläuft, da nur Bruchteile einer Sekunde benötigt werden.

@echo off
setlocal enableextensions enabledelayedexpansion
::erzeuge Backspace   (Variable %BS%)
for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"
set /a count=0
:: aendere den wert in der naechsten Zeile  für die  Verzoegerung
set /a _delay=30000

:main
color 0b
echo.
call :ltype Lorem ipsum dolor sit amet, consectetuer adipiscing elit. 
call :ltype Aenean commodo ligula eget dolor. Aenean massa. 
echo.
call :ltype Cum sociis natoque penatibus et magnis dis parturient montes, 
call :ltype pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, 
call :ltype fringilla vel, aliquet nec, vulputate eget, arcu. 
echo.


echo. & echo ...fertig...
pause
:end_main
exit /b

:subroutines
:ltype
set "line=%*
set "char=!line:~%count%,1!"
:: Batch-Trick: Ausgabe ohne Linefeed mit set /p "= string"<nul
if not "%char%"=="" set /p "=.%BS%%char%" <nul
call :delay %_delay%
if "%char%"=="" echo. & set /a count=0 &  exit /b
set /a count+=1
goto :ltype

:delay
for /L %%b in (1,1,%1) do rem
exit /b


Sollten irgendwas nicht funktionieren, bitte ich um Vergebung.

Ich habe den Code einer meiner älteren Batches im Blindflug auf dem Handy abgespeckt... und konnte nicht Testen...

Original mit Demovideo

https://www.gutefrage.net/frage/wie-kann-man-bei-einer-eingabeaufforderung-animieren

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