Question

J'essaie de créer un effet de machine à écrire, mais Set / P décape les espaces depuis que je suis sur Win7.Y a-t-il un autre moyen ou une astuce qui me manque?

Voici le code que j'ai proposé jusqu'à présent:

@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

Était-ce utile?

La solution

Si la sortie est strictement pour l'écran et jamais redirigé vers un fichier, il existe une solution simple à l'aide d'un caractère de retour arrière.Préfixer chaque sortie de jeu / p avec un caractère imprimable, suivi d'un backbacks, suivi de la chaîne souhaitée.

@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

Le problème avec ce qui précède est que les caractères DOT et BackSpace apparaîtront dans n'importe quelle sortie redirigée vers un fichier.Un autre problème possible est que la technique échoue si le curseur est à la dernière position de caractère sur la ligne car une surface de ligne sera automatiquement émise après le point, puis le backacace ne peut pas sauvegarder jusqu'à la ligne antérieure.

Si vous devez rediriger la sortie dans un fichier ou si vous souhaitez une solution robuste qui fonctionne dans tous les cas, JEB a une solution très intelligente à Texte de sortie sans linefeed, même avec un espace de tête ou= .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top