Pregunta

Estoy tratando de crear un efecto de máquina de escribir, pero Set / P está separando los espacios desde que estoy en Win7.¿Hay otra forma o un truco que me estoy perdiendo?

Aquí está el código que he llegado hasta ahora:

@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

¿Fue útil?

Solución

Si la salida es estrictamente para la pantalla, y nunca se redirige a un archivo, entonces hay una solución simple utilizando un carácter de retroceso.Prefijo Cada conjunto de conjunto / P con algún carácter imprimible, seguido de un retroceso, seguido de la cadena deseada.

@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

El problema con lo anterior es que aparecerán los caracteres DOT y BackSpace en cualquier salida que se redirige a un archivo.Otro problema posible es que la técnica falla si el cursor está en la última posición de caracteres en la línea porque una línea se emitirá automáticamente después del punto, y luego el espacio posterior no puede respaldar la línea anterior.

Si debe redirigir la salida a un archivo, o si desea una solución robusta que funcione en todos los casos, entonces JEB tiene una solución muy inteligente en Texto de salida sin línea de línea, incluso con espacio líder o= .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top