как дать строке кода .bat ограничение по времени? - PullRequest
1 голос
/ 29 января 2020

Я хочу установить 30-секундный лимит времени для :choice Y/N/P, и после того, как время истечет goto :start

Код, который мне нужен, чтобы получить информацию о времени

@echo off
:start
echo AmishCraft will start
TIMEOUT /T 5
echo (%time%)
java -Xms2048M -Xmx4096M -jar server.jar

call C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe

ping 1.1.1.1 -n 1 -w 3000 >nul 

:choice 
set /P a=do you want to restart? Yes No Pause [Y/N/P]?
if /I "%a%" EQU "Y" goto :restart
if /I "%a%" EQU "N" goto :stop
if /I "%a%" EQU "P" goto :pause
goto :start

:restart
cls
echo server will restart

cls
goto :start

:stop

cls
echo closing server
TIMEOUT /T 5
exit

cls
echo server is paused 
:pause
:choice 
set /P a=do you want start? Restart Stop [R/S]?
if /I "%a%" EQU "R" goto :restart
if /I "%a%" EQU "S" goto :stop
goto :start

pause

1 Ответ

2 голосов
/ 29 января 2020
  • /T - это переключатель timeout для выбора.
  • /D - это переключатель для определения стандартного уровня ошибки / параметра , чтобы установить, если время истекло.

Пример:

CHOICE /T 5 /N /C 1234 /M "Select Option 1,2,3 or 4" /D 1

Применяется тайм-аут 5 секунд, с уровнем ошибки, установленным в значение 1, равный уровню ошибки 1 в этом случае.

  • /N Скрывает строку приглашения выбора по умолчанию.
  • /M Позволяет определить собственную строку приглашения
  • /C Позволяет буквенно-цифровым символам определяться как варианты выбора

Примечание:

  • Уровень ошибки устанавливается слева направо относительно перечисленных опций.
  • После выбора команды Уровень ошибки должен оцениваться от наивысшего к низшему
  • ИЛИ
  • Используется напрямую; Например, в Goto :LabelName%errorlevel% Команде

* Ответ на комментарий *

CHOICE /C 123 /T Timeout 25 /D goto :start /M 1 choice menu 25s
IF %ERRORLEVEL% EQU 1 goto :choice1

В приведенном выше тексте есть несколько ошибок.

  • /T Timeout 25 должно быть: /T 25
  • Timeout неявно присутствует в переключателе /T и НЕ является частью правильного использования команды выбора.

  • /D goto :start должно быть: /D 1 ИЛИ /D 2 ИЛИ /D 3

  • Следует использовать только определенные /C параметры, следующие после /D переключатель

  • /M 1 choice menu 25s неверен.

  • Запрос после /M должен быть заключен в Двойные кавычки: "[1] Option 1. [2] Option 2. [3] Option 3."

  • Оценка уровня ошибки должна выполняться в строке после команды CHOICE.

  • Снова, чтобы быть понятным, Оценка должна быть сделана от самого высокого до самого низкого . Когда уровень ошибки оценивается после выбора, он на самом деле интерпретируется как If ERRORLEVEL GTR n, несмотря на то, что выполняется сценарий с использованием If ERRORLEVEL n

Пример правильного использования всех выше:

@echo off
:menu
cls
CHOICE /N /T 25 /C 123 /M "[1] Option 1. [2] Option 2. [3] Start." /D 3
    IF ERRORLEVEL 3 (
        GOTO :start
    ) else (
        GOTO :choice%errorlevel%
    )

:start
ECHO( You are at the start
Pause
GOTO :menu

:choice1
ECHO( You are at option 1
Pause
GOTO :menu

:choice2
ECHO( You are at option 2
Pause
GOTO :menu
...