批处理文件:打字机效果

时间:2015-02-06 15:49:35

标签: batch-file cmd

我只是得到了一些代码才能完成这个效果,但是我需要更快地打字,就像每半秒写一封信一样。

for %%i in (h e l l o o o o o o o o o o o o o o) do (
   set /p a=%%i<nul
   ping 0.0.0.0 -n 2.0>nul 2>&1
)

有人可以修改它以便更快地输入吗?

4 个答案:

答案 0 :(得分:4)

上面评论中的ping解决方案对于已安装网络接口的计算机来说是一个有价值的解决方案(几乎所有人都有)。

@echo off
setlocal

for %%i in (h e l l o o o o o o o o o o o o o o) do (
   set /p "=%%i"<nul
   ping 169.254.0.0 -n 1 -w 500 >nul
)
echo;
goto :EOF

但是,使用此方法识别的最短等待时间似乎为500毫秒。如果将500更改为较低值,则仍然会在字母之间暂停半秒。如果您想要更好的控制,或者您的计算机没有网络接口,您将不得不借用另一个运行时环境 - 例如JScript。

@if (@CodeSection == @Batch) @then

@echo off
setlocal

for %%i in (h e l l o o o o o o o o o o o o o o) do (
   set /p "=%%i"<nul
   cscript /nologo /e:JScript "%~f0"
)
echo;

goto :EOF
rem // end batch portion

@end
// begin JScript chimera
WSH.Sleep(Math.random() * 250 + 100);

请注意选择要ping的IP:要使-w开关按预期工作,您ping的IP必须导致“请求超时”。您可以使用不存在的LAN IP,例如10.x.x.x或192.168.x.x.但是对于广泛部署,如果您无法确定这些范围是否未使用,则169.254范围内的链接本地IP应该可以正常工作。请不要在历史版本的bogon空间中使用IP,如1.1.1.1或1.2.3.4。仅仅因为这样的地址没有回复并不意味着你的数据包没有在某处增加网络拥塞。

最终随着IPv4地址越来越接近完全耗尽,人们需要更加认真地用虚假的流量来污染互联网。它可能是1.1.1.1和1.2.3.4永远不会对任何人有用,因为它们经常被随意的脚本编写者滥用。但是,没有理由加入对这些地址的虐待。 See this page需要进一步阅读,请保存,以保存bogons。


Jack.bat

为了看看我能在多大程度上取得打字机效果,我写了一个脚本,输出类似于X屏幕保护程序“Jack”的文字。它反复输出相同的行,并随机引入印刷错误。运行它,你会被迷住,根据脚本完成一行没有任何拼写错误。

@if (@CodeSection == @Batch) @then

@echo off
setlocal

cls
color 70

call :split chars "All work and no play makes Jack a dull boy."

:begin
for %%i in (%chars%) do call :type "%%~i"
echo;
goto begin

:split <var_to_set> <str>
setlocal enabledelayedexpansion
set "line="
set "str=%~2"
for /L %%I in (0,1,43) do set line=!line! "!str:~%%I,1!"
endlocal & set %~1=%line%
goto :EOF

:type <char>
cscript /nologo /e:JScript "%~f0" "%~1"
goto :EOF

@end
// end batch / begin JScript chimera
function pause() { WSH.Sleep(Math.random() * 250 + 100); }
function odds(num) { return !(Math.round(Math.random() * num) % num) }
function backspace() { WSH.StdOut.Write(String.fromCharCode(8)); }

pause();

if (odds(15)) {
    WSH.StdOut.Write(String.fromCharCode(Math.round(Math.random() * 95 + 32)));
    pause();
    if (!odds(20)) {
        backspace();
        pause();
    }
}

if (odds(300)) WSH.Echo('');
if (!odds(400)) WSH.StdOut.Write(WSH.Arguments(0));

答案 1 :(得分:2)

试试这段代码:消息打字机+说话语音

@echo off
Title Typewriter with speaking voice by Hackoo 2016
Color 0A & Mode con cols=70 lines=3
set Msg="This is only a testing string to see if my script really works or not?"
Call :Typewriter %Msg%
set Msg="              What are you doing now dude ?"
Call :Typewriter %Msg%
set Msg="         I want to say Hello for everybody on StackOverflow !"
Call :Typewriter %Msg%
pause>nul
Exit /b
::*********************************************************************
:TypeWriter
Cls
echo(
(
echo strText=wscript.arguments(0^)
echo intTextLen = Len(strText^)
echo intPause = 150
echo For x = 1 to intTextLen
echo     strTempText = Mid(strText,x,1^)
echo     WScript.StdOut.Write strTempText
echo     WScript.Sleep intPause
echo Next
echo Set Voice=CreateObject("SAPI.SpVoice"^)
echo voice.speak strText
)>%tmp%\%~n0.vbs
@cScript.EXE /noLogo "%tmp%\%~n0.vbs" "%~1"
exit /b
::********************************************************************* 

答案 2 :(得分:2)

@echo off
setlocal enableextensions enabledelayedexpansion

set lines=1


set "line1=Check it out M8! Im typing but not typing! BEWM! BEWM! BEWM!"


for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "BS=%%a"

for /L %%a in (1,1,%lines%) do set num=0&set "line=!line%%a!"&call :type

pause>nul
goto :EOF

:type
set "letter=!line:~%num%,1!"
set "delay=%random%%random%%random%%random%%random%%random%%random%"
set "delay=%delay:~-6%"
if not "%letter%"=="" set /p "=a%bs%%letter%" <nul

:: adjust the 3 in the line below: higher is faster typing speed

for /L %%b in (1,3,%delay%) do rem
if "%letter%"=="" echo.&goto :EOF
set /a num+=1
goto :type

答案 3 :(得分:1)

Ping 0.0.0.0几乎立即发出PING: transmit failed. General failure错误消息。

根据暗示rojo的评论编辑

最好ping一些地址,返回从Private-Use Network range中选择的Request timed out消息。

for %%i in (h e l l o o o o o o o o o o o o o o) do (
   set /p a=%%i<nul
   ping a.b.c.d -4 -n 1 -w 500>nul 2>&1
)

下面:

  • a.b.c.d =地址返回Request timed out消息,请参阅下面的(*)。

  • -4 =强制使用IPv4。

  • -n 1 =要发送的回应请求数(一)。

  • -w 500 =等待每个回复的超时(以毫秒为单位)(500 = 1/2秒);这应该可以达到cca 5秒(一个无效回声请求的大致时间)。

(*)IANA为私有互联网保留了以下IPv4地址范围,并且不能在全球互联网上公开路由:

 10.0.0.0     --   10.255.255.255  (10/8       prefix)
 172.16.0.0   --   172.31.255.255  (172.16/12  prefix)
 192.168.0.0  --   192.168.255.255 (192.168/16 prefix)