批处理:处理速度变慢
Batch: Slowing processing speed
我正在创建一个小项目来打动我的朋友,并且很好奇如何仅使用一行来减慢程序中的文本流出速度。
我有一个问题(相信我,我做了我的研究),并且很好奇如何在不做 echo hi TIMEOUT 5>nul echo hi again
的情况下降低批处理速度。但是相反,开头只有一行,这会减慢整个批处理脚本的文本输出速度。谢谢!
在批处理语言中执行此操作的唯一真正方法是使用 call
命令调用函数并开始工作。这可以放在批处理文档的底部。
此外,由于您在这里和阅读评论时并不清楚您的目标,我假设从 echo hi & TIMEOUT 5>nul echo hi again
开始您希望在 5 秒后显示每一行 但是 仅来自一行或一条命令。这可以通过 call
和 FOR
循环轻松完成。在这种情况下,我们可以使用 %*
来收集您想要的所有 "Words Line One"
、"Words Line Two"
。
将其与简单的 syntax-replacement 相结合以删除引号,我们就可以了。
DelayedLine.bat
@echo off
@setlocal EnableDelayedExpansion
Rem | To use the command, Call :SlowOutput "Desired Line" "Desired Line" "Desired Line"
Call :SlowOutput "Line Number One" "Line Number Two" "Line Number Three"
pause>nul
Goto :EOF
:SlowOutput
for %%A in (%*) do (
Set "String=%%A"
Set String=!String:"=%!
echo !String!
Rem | Change 5 To How Many (Seconds) You Wish
Timeout 5 /NoBreak>Nul
)
goto :EOF
如果您的目标是打字机效果,我们可以使用 hackoo on this thread here 的脚本并修改它以在有组织的情况下与 call
一起工作。
此脚本将一个字母一个字母地显示,并且每个 call "Word" "Word"
新引号换行。所有通过 call
一行工作
LetterDelay.bat
@echo off
Rem | To use the command, Call :SlowText "Desired Text"
Rem | To combine two "echo's" on one line we can use the "&"
Call :SlowText "Hello!" & Call :SlowText "How is your day today?"
pause>nul
Goto :EOF
:SlowText
(
echo strText=wscript.arguments(0^)
echo intTextLen = Len(strText^)
echo intPause = 100
echo For x = 1 to intTextLen
echo strTempText = Mid(strText,x,1^)
echo WScript.StdOut.Write strTempText
echo WScript.Sleep intPause
echo Next
)>%tmp%\%~n0.vbs
@cScript.EXE /noLogo "%tmp%\%~n0.vbs" "%~1"
Rem | echo. is optional. It's used as a constant for a newline \n
echo.
goto :EOF
如需任何命令的帮助,请执行以下操作:
call /?
set /?
for /?
if /?
find /?
- 等等。
我正在创建一个小项目来打动我的朋友,并且很好奇如何仅使用一行来减慢程序中的文本流出速度。
我有一个问题(相信我,我做了我的研究),并且很好奇如何在不做 echo hi TIMEOUT 5>nul echo hi again
的情况下降低批处理速度。但是相反,开头只有一行,这会减慢整个批处理脚本的文本输出速度。谢谢!
在批处理语言中执行此操作的唯一真正方法是使用 call
命令调用函数并开始工作。这可以放在批处理文档的底部。
此外,由于您在这里和阅读评论时并不清楚您的目标,我假设从 echo hi & TIMEOUT 5>nul echo hi again
开始您希望在 5 秒后显示每一行 但是 仅来自一行或一条命令。这可以通过 call
和 FOR
循环轻松完成。在这种情况下,我们可以使用 %*
来收集您想要的所有 "Words Line One"
、"Words Line Two"
。
将其与简单的 syntax-replacement 相结合以删除引号,我们就可以了。
DelayedLine.bat
@echo off
@setlocal EnableDelayedExpansion
Rem | To use the command, Call :SlowOutput "Desired Line" "Desired Line" "Desired Line"
Call :SlowOutput "Line Number One" "Line Number Two" "Line Number Three"
pause>nul
Goto :EOF
:SlowOutput
for %%A in (%*) do (
Set "String=%%A"
Set String=!String:"=%!
echo !String!
Rem | Change 5 To How Many (Seconds) You Wish
Timeout 5 /NoBreak>Nul
)
goto :EOF
如果您的目标是打字机效果,我们可以使用 hackoo on this thread here 的脚本并修改它以在有组织的情况下与 call
一起工作。
此脚本将一个字母一个字母地显示,并且每个 call "Word" "Word"
新引号换行。所有通过 call
LetterDelay.bat
@echo off
Rem | To use the command, Call :SlowText "Desired Text"
Rem | To combine two "echo's" on one line we can use the "&"
Call :SlowText "Hello!" & Call :SlowText "How is your day today?"
pause>nul
Goto :EOF
:SlowText
(
echo strText=wscript.arguments(0^)
echo intTextLen = Len(strText^)
echo intPause = 100
echo For x = 1 to intTextLen
echo strTempText = Mid(strText,x,1^)
echo WScript.StdOut.Write strTempText
echo WScript.Sleep intPause
echo Next
)>%tmp%\%~n0.vbs
@cScript.EXE /noLogo "%tmp%\%~n0.vbs" "%~1"
Rem | echo. is optional. It's used as a constant for a newline \n
echo.
goto :EOF
如需任何命令的帮助,请执行以下操作:
call /?
set /?
for /?
if /?
find /?
- 等等。