我正在尝试创建打字机效果,但 SET /P 正在删除空格,因为我使用的是 win7。我还缺少其他方法或技巧吗?
这是我到目前为止想出的代码:
@echo off
setlocal enabledelayedexpansion
set text=This is a test
call :strlen len text
for /l %%b in (0,1,%len%) do (
set /a T=!random! %% 3
ping -n !T! 127.0.0.1>nul
<nul set /p=!text:~%%b,1!
)
exit /b
:strlen <resultVar> <stringVar>
setlocal EnableDelayedExpansion
set "s=!%~2!#" & set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" ( set /a "len+=%%P" & set "s=!s:~%%P!" ))
endlocal &set "%~1=%len%"
exit /b
如果输出严格针对屏幕,并且从不重定向到文件,那么有一个使用退格字符的简单解决方案。在每个 SET /P 输出前面加上一些可打印字符,后跟一个退格键,最后是所需的字符串。
@echo off
setlocal enabledelayedexpansion
:: Define BS to contain backspace character
for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "BS=%%A"
set text=This is a test
call :strlen len text
for /l %%b in (0,1,%len%) do (
set /a T=!random! %% 3
ping -n !T! 127.0.0.1>nul
<nul set /p=.!BS!!text:~%%b,1!
)
exit /b
:strlen <resultVar> <stringVar>
setlocal EnableDelayedExpansion
set "s=!%~2!#" & set "len=0"
for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%P,1!" NEQ "" ( set /a "len+=%%P" & set "s=!s:~%%P!" ))
endlocal &set "%~1=%len%"
exit /b
上述问题是点和退格字符将出现在重定向到文件的任何输出中。另一个可能的问题是,如果光标位于该行的最后一个字符位置,则该技术会失败,因为在点之后将自动发出换行符,然后退格键无法返回到前一行。
如果您必须将输出重定向到文件,或者您想要一个适用于所有情况的强大解决方案,那么 jeb 有一个非常聪明的解决方案:.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)