попробуйте это:
@echo off
:typewriter
setlocal enableDelayedExpansion
set "string=%~1"
call ::strlen "%string%#" len
if "%~2" neq "" (
set /a _timeout=%~2
) else (
set _timeout=500
)
set "carret=^"
for /l %%a in (0,1,%len%) do (
set "letter=!string:~%%a,1!"
for /f %%# in (">" "<" "|" "&") do (
if "!prev!" equ "%%#" do set "prev=^^%%#"
)
if "!letter!" equ " " (
set "suffix=!suffix! "
)
ping 192.0.2.0 -n 1 -w %_timeout% 1>nul 2>&1
if "!prev!" neq " " (
break|set /p=!carret!!prev!!suffix!
set "suffix="
)
set "prev=!letter!"
)
endlocal
exit /b 0 %errorlevel%
:strlen
Setlocal EnableDelayedExpansion
:: strLen String [RtnVar]
:: -- String The string to be measured, surround in quotes if it contains spaces.
:: -- RtnVar An optional variable to be used to return the string length.
Set "s=#%~1"
Set "len=0"
For %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%N,1!" neq "" (
set /a "len+=%%N"
set "s=!s:~%%N!"
)
)
Endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len%
Exit /b
он принимает два аргумента - строку, которую вы хотите набирать медленно, и время ожидания в миллисекундах между каждой буквой.Пример (если вы называете это typewriter.bat
):
call typewriter.bat "hello world" 200
просто помните, что восклицательные знаки не будут напечатаны из-за задержки расширения. (но вы можете использовать специальные символы, такие как >
, |
, &
, <
)
Для дальнейшего ознакомления проверьте следующее: strlen , подстрока , сон в миллисекундах