Batch file 使用<;数量/套

Batch file 使用<;数量/套,batch-file,nul,Batch File,Nul,我正在尝试创建一个打字机效果,但是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

我正在尝试创建一个打字机效果,但是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
@echo关闭
延迟扩展
set text=这是一个测试
电话:strlen len text
对于(0,1,%len%)中的/l%%b,请执行以下操作(
set/at=!random!%%3
ping-n!T!127.0.0.1>nul

如果输出严格针对屏幕,并且从未重定向到文件,则有一种简单的解决方案,使用退格字符。在每个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
@echo关闭
延迟扩展
::定义BS以包含退格字符
对于/f%%A in(“'prompt$H&for%%B in(1)do rem””)请设置“BS=%%A”
set text=这是一个测试
电话:strlen len text
对于(0,1,%len%)中的/l%%b,请执行以下操作(
set/at=!random!%%3
ping-n!T!127.0.0.1>nul

使用十六进制FF而不是十六进制20来表示空格是否可行?@foxidrive-我想是的,如果这样可以的话。谢谢Dave。这就是我一直在寻找的窍门。
如何在(1)中提示$H和%%B,rem
如何创建退格?是否有一个讨论这个问题的线程?