批处理文件自动化问题


1

所以,我想为我的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

这会在不同的命令提示符中启动所有服务器。但问题是,没有办法(我知道)用这个来结束服务器而没有我手动输入/停止到每个命令提示服务器,然后再次'退出'进入每个命令提示符退出它。然后我也手动重新执行批处理文件。

所以,我的问题是:

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

编辑:

因此,为了澄清Minecraft服务器的工作原理,我正在添加此编辑。

当你启动服务器时,显然它运行服务器,所有人和人都可以连接和播放。它有一个命令提示符,您可以使用它来执行命令并查看信息以及所有这些信息。为了正确关闭服务器以保存所有内容并且不损坏文件,您可以在命令提示符下键入“stop”。然后它退出服务器并通常会退出命令提示符,让您按意愿重新打开。然后,使用我设置的批处理文件,它不只是在输入“stop”后退出命令提示符,它会返回到您继续使用命令提示符的目录,就好像它不再运行服务器一样(因为它不是),你必须输入'exit'来关闭命令提示符。

Answers:


0

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

我已经包含了两部分批处理脚本解决方案。第一部分将要求设置与应用程序名称字符串匹配的标题,以便正在运行的app命令包含此元数据。第二部分将结合使用appactivate将命令窗口与应用程序名称标题一起激活,并使用sendkeys模拟键盘笔划以关闭并重新启动应用程序。


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

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

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

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

注意:您需要将AppName=值设置为与您设置的每个脚本使用的值和大小写相同title。该StopApp=值应设置为您所使用的,它的类型在停止相关应用价值endstop等。

@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: 00 AM确保它将在特定时间运行。现在在该Advanced settings部分中,您希望确保Repeat task every处于24小时值(如果需要,可以手动输入)并将其for a duration of设置为无限值,这将确保它每晚12点午夜开始。

在此输入图像描述

从“ 操作”选项卡中,选择“ 新建”选项以创建新操作。然后在“ 新建操作”窗口中,确保该Action字段设置为“ 启动程序”,并且该Program/script字段具有您需要运行的脚本的完整路径,并且该Start in字段仅包含将运行的脚本所在的文件夹路径。再按OKOK,现在一切都应该自动完成。

在此输入图像描述


更多资源


@FireDragon好的,对于这一timeout /t %StartPauseSec%行,你可以将它::timeout /t %StartPauseSec%评论出来,然后在没有它的情况下运行,看看它是否可以正常运行。如果它有效,那么您也可以删除或注释掉该::SET StartPauseSec=10行。我无法完全测试这些过程,但是对于某些事情有一个小的等待时间永远不会伤害,并且通常总是帮助我使用这些类型的解决方案自动化的东西,但我没有Mine Craft服务器在我身边完全测试。
Pimp Juice IT

我可以做的是在另一个事件完成之后安排每个事件,但我宁愿不必这样做
Fire Dragon

好吧,好吧我测试了它,关闭BungeeCord,关闭HUB,重新打开HUB,关闭它,打开一个新的PvE而不关闭已经存在的PvE,关闭它,并为其他所有做同样的事情服务器,以SecQ结尾,但没有关闭。
火龙

所以我拍摄了一个完全发生了什么的视频,它还显示了我所拥有的设置和批处理文件代码。我该如何与您分享?
火龙

此外,它是一个屏幕,所以你知道
火龙
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.