首页 > 解决方案 > 如何给 .bat 代码行一个时间限制?

问题描述

我想设置 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

标签: batch-filecmd

解决方案


  • /T是可供选择的超时开关。
  • /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

推荐阅读