문제

타자기 효과를 만들려고하지만 세트 / 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 출력을 인쇄 가능한 문자가있는 각 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는 LineFeed가없는 출력 텍스트 또는 선행 공간 또는= 에서도

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top