上述 cmets 中的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));