批处理文件自动化问题

批处理文件自动化问题

因此,我想为我的 Minecraft 服务器创建一个批处理文件,以便在每天结束时启动并重新启动服务器(最好是午夜,但 24 小时也可以)

这是我的启动批处理,它调用其他批处理文件来单独打开和启动服务器:

start cmd /k call BungeeStartup.bat
start cmd /k call HUBStartup.bat
start cmd /k call PvEStartup.bat
start cmd /k call PvPStartup.bat
start cmd /k call MinigamesStartup.bat
start cmd /k call TownyStartup.bat
start cmd /k call SecQStartup.bat

每个“Startup.bat”调用如下方式运行服务器:

D:
cd Minecraft 1.12 Server Files
cd BungeeCord   <-- and each it's respective server, of course, so I don't have to type it all out again
RUNGEE.bat

最后,RUN.bat 文件如下所示:

java -jar -Xmx350M spigot-1.12.2.jar -o true

这样就可以在不同的命令提示符中启动我的所有服务器。但问题是,没有办法(据我所知)用这种方法来结束服务器,除非我手动在每个命令提示符服务器中输入 /stop,然后再次在每个命令提示符中输入“exit”以退出它。然后我还必须手动重新执行批处理文件。

所以,我的问题是:

  • 我如何(使用批处理文件)结束每个服务器,然后结束每个命令提示符窗口,而无需手动执行此操作
  • 它们退出后如何自动重新启动它们。
  • 以及如何让这种情况每 24 小时发生一次(或者最好在每晚午夜发生一次)

编辑:

因此,为了阐明 Minecraft 服务器的工作原理,我添加了此编辑。

当您启动服务器时,显然它会运行服务器和所有内容,人们可以连接并玩游戏。它有一个命令提示符,您可以使用它来执行命令和查看信息等等。为了正确关闭服务器以保存所有内容并且不会损坏文件,您可以在命令提示符中键入“stop”。然后它退出服务器,通常会退出命令提示符以供您根据需要重新打开。然后,使用我设置的批处理文件,它不会在键入“stop”后退出命令提示符,它会将您返回到目录,让您继续使用命令提示符,就好像它不再运行服务器一样(因为它没有运行),您必须键入“exit”才能关闭命令提示符。

答案1

MineCraft 游戏应用程序停止和重启自动化 - Windows

我提供了一个由两部分组成的批处理脚本解决方案。第一部分需要设置与应用程序名称字符串匹配的标题,以便正在运行的应用程序命令包含此元数据。第二部分将使用以下组合激活激活带有应用程序名称标题的命令窗口,以及发送键模拟键盘敲击来关闭并重新启动应用程序。


1. 批处理脚本(设置标题)

笔记:您只需在当前使用的同一批处理脚本中添加一行新内容title "<appname>",但要位于您运行的命令上方java -jar ~。显然,您需要将<appname>值替换为需要停止的应用程序的名称,等等。

title "BungeeCord"
java -jar -Xmx350M spigot-1.12.2.jar -o true

2.批处理脚本(停止应用程序然后重新启动)

笔记:您需要将AppName=值设置为与设置的每个脚本相同的值和大小写title。该StopApp=值应设置为您用来停止相关应用程序的值例如end,,stop等等。

@ECHO OFF

SET AppName=BungeeCord
SET StopApp=end
SET StopPauseSec=5
SET StartPauseSec=10

SET TempVBSFile=%temp%\~tmpSendKeysTemp.vbs
IF EXIST "%TempVBSFile%" DEL /F /Q "%TempVBSFile%"

ECHO Set WshShell = WScript.CreateObject("WScript.Shell") >>"%TempVBSFile%"
ECHO Wscript.Sleep 900                                    >>"%TempVBSFile%"
ECHO WshShell.AppActivate "%AppName%"                     >>"%TempVBSFile%"
ECHO Wscript.Sleep 900                                    >>"%TempVBSFile%"
ECHO WshShell.SendKeys "%StopApp%"                        >>"%TempVBSFile%"
ECHO Wscript.Sleep 500                                    >>"%TempVBSFile%"
ECHO WshShell.SendKeys "{ENTER}"                          >>"%TempVBSFile%"
ECHO Wscript.Sleep %StopPauseSec%000                      >>"%TempVBSFile%"
ECHO WshShell.SendKeys "%%{F4}"                           >>"%TempVBSFile%"
CSCRIPT //nologo "%TempVBSFile%"

timeout /t %StartPauseSec%
start "" "cmd /k call BungeeStartup.bat"
EXIT /B

调度

您可以使用任务计划程序创建新任务。从一般的选项卡,为作业指定一个适用的名称,然后确保检查仅在用户登录时运行以最高权限运行选项。

在此处输入图片描述

来自触发器标签选择新的选项来创建新的触发器。然后确保Begin this task字段设置为按计划进行选项Settings设置为一度字段Start值为您所在地午夜的日期(例如7/12/2018),时间值设置为上午 12:00以确保它会在特定时间运行。现在在本Advanced settings节中,您要Repeat task every确保24小时值(如果需要,请手动输入)并将for a duration of设置为无限期地值,这将确保它每天晚上 12 点启动。

在此处输入图片描述

来自操作选项卡,选择新的选项来创建新动作。然后在新行动窗口确保Action字段设置为启动程序字段Program/script包含您需要运行的脚本的完整路径,字段Start in仅包含将要运行的脚本所在的文件夹路径。按好的好的现在一切都应该自动化了。

在此处输入图片描述


更多资源

相关内容