批处理编程=如何在回显字符时使字符看起来变慢,就像您在键入字符时

时间:2019-01-19 16:58:07

标签: batch-file cmd command

如果您曾经看过一部黑客电影,就会看到代码像一个人键入字符一样缓慢地逐字符显示。我想批量执行此操作。我找到了一些执行类似操作的代码,但是带有孔线。

代码可在以下位置找到: How to have multiple colors in a Windows batch file? dbenham的答案。

我已经尝试使用disableDelayedExpansion,因为命令“听起来”像它想做的一样,但是我什么都没得到

谢谢您的帮助。

另外,我想做什么的一个例子- text appearing slowly gif

2 个答案:

答案 0 :(得分:2)

根据您的字符串内容,可能会适合您的简单程度。

@Echo Off

Set "STRING=Try this, unfortunately it is untested!"

For /F %%A In ('"Prompt $H&For %%B In (1) Do Rem"') Do Set "BS=%%A"

For /F Delims^=^ EOL^= %%A In ('"(CMD/U/CEcho=%STRING%)|Find /V """'
) Do Set/P "=a%BS%%%A"<Nul & PathPing 127.0.0.1 -n -q 1 -p 100 1>Nul

您可以根据需要通过调整数字100来更改字母显示的速度。也许尝试200可以降低输入速度,而尝试50可以提高输入速度!

答案 1 :(得分:0)

尝试一下:

@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

请记住,由于延迟扩展,不会打印感叹号。(但是您可以使用特殊符号,例如>|&<

有关更多参考,请检查以下各项:strlensubstringsleep in milliseconds