Пакет: замедление скорости обработки - PullRequest
0 голосов
/ 22 декабря 2018

Я создаю небольшой проект, чтобы произвести впечатление на моих друзей, и мне было любопытно, как можно замедлить отток текста в программе, используя только одну строку.

У меня возникла проблема (И поверьте мне(Я проводил исследования), и мне было любопытно, как замедлить скорость пакетной обработки в целом, не делая echo hi TIMEOUT 5>nul echo hi again и т. Д. Но вместо этого, только одна строка в начале, которая замедляет вывод текста длявесь пакетный скрипт.Спасибо!

1 Ответ

0 голосов
/ 23 декабря 2018

Единственный реальный способ сделать это на языке пакетной обработки - использовать команду call для вызова функции и работы.Это может быть размещено внизу вашего пакетного документа.

Кроме того, поскольку вы не совсем ясно поняли свою цель здесь и прочитали комментарии, я предполагаю, что из echo hi & TIMEOUT 5>nul echo hi again вы хотите отобразитькаждая строка через 5 секунд НО только из одной строки или команды.Это можно легко сделать с помощью петли call и FOR.В этом случае мы можем использовать %*, чтобы собрать все "Words Line One", "Words Line Two", которые вы хотите.

Комбинируя это с простой синтаксической заменой , чтобы удалить кавычки, и мы хороши.

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 в этой теме здесь и измените его для работы с 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 /?
  • Так далее.
...