批处理脚本,用于发送命令以正常关闭多个Spigot Minecraft服务器

时间:2018-02-04 12:06:52

标签: batch-file jar minecraft bukkit

我想知道是否有可能使Windows批处理脚本向三个已经运行的.jar文件实例发送命令。 在这种情况下,打开的.jar文件对应于 bungeeCord 实例,生存实例和 hub 实例。每个 这些.jar实例一起形成整个Spigot Minecraft服务器。 (见图片)

survival .jar instance hub .jar instance bungeeCord .jar instance

目前为了优雅地关闭每个服务器/ .jar实例,您需要手动输入“停止” 命令在生存集线器实例的命令行界面中。你必须输入'end'才能关闭 优雅的 bungeeCord 实例。

为了自动执行此过程,我想编写一个批处理脚本,允许我发送'stop''end'命令 只需单击一次即可运行当前运行的.jar实例,而不必在每个.jar上手动输入每个命令 实例

我实际上已经设法通过编写以下批处理脚本来自动启动每个.jar实例进程 这可能有所帮助:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script src="https://cdn.rawgit.com/konvajs/konva/1.6.5/konva.min.js"></script>
<p>Drag bounds function on rotated rect. Red rectangle is the extent of the bounds function. Drag the rect to the boundary and notice it is captured. Now click to rotate by 90%. A simple rect-based dragFunc would fail because the origin of the rect is not top-right. The solution function solves this.
</p>
<p>
<button id='btnRotate'>Rotate by +90 degrees</button> <span id='info'>0</span> degrees.
</p>
<div id='container1'></div>

运行此脚本后,将打开并运行所有三个必需的.jar实例,如上图所示。

如果您也可以看到文件夹结构,也可能会有所帮助,所以我提供了一个图像:

enter image description here

start.bat文件对应于上面的代码,用于启动所有三个.jar实例。

任何帮助都将不胜感激。

感谢。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

@echo off
taskkill /F /IM java.exe

或者您命名所有服务器,例如服务器(在开始脚本中使用 title Server ) 然后

@echo off
taskkill /F /IM java.exe /FI "Server"

您也可以将服务器命名为

  1. 服务器-CityBuild

  2. 服务器-大厅 ...

然后使用

@echo off
taskkill /F /IM java.exe /FI "Server*"

答案 1 :(得分:0)

请勿使用taskkill,这会导致进程丢失数据!
我发现了一个名为SendMessage的好工具,它可以将密钥发送到进程。我写了一个小批处理脚本,但是它有一些错误,我找不到这些错误的根源,但是,如果您修复代码,则可以使用一个有效的批处理脚本来解决问题。 (我知道我不应该发布不起作用的代码作为答案,但是它包含逻辑,您可以根据需要形成此代码。)

@echo off
cls

::Declare servers by title
::For BungeeCord servers add "BCS" prefix
set servers[0]=BCStest1 
set servers[1]=test2
set servers[2]=test server

::Servers in the array minus 1
set len=2
::Loop trought the servers
for /l %%s in (0,1,%len%) do (
    ::Set the server variable to the current server, depending on the loop number
    set server=%servers[%%s]%

    ::Testing for the server type
    if "BCS"=="%server:~0,3%" (
    ::If it's a BungeeCord server

        ::Removing the prefix
        set server=%server:~3%

        ::Sending shutdown command
        echo Sending shutdown command to server: %server%

        ::e
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:101 /lparam:1
        ::n
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:110 /lparam:1
        ::d
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:100 /lparam:1
        :: ENTER
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:13 /lparam:1

    ) else (
    ::If it's a normal server

        ::Sending shutdown command
        echo Sending shutdown command to server: %server%

        ::s
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:115 /lparam:1
        ::t
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:116 /lparam:1
        ::o
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:111 /lparam:1
        ::p
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:113 /lparam:1
        :: ENTER
        SendMessage-1.1.2.exe /windowtitle:%server% /message:WM_CHAR /wparam:13 /lparam:1
    )
)

::If the execution gets here it was successfull
echo Stop command was sent to all server!
pause

(对不起,我很久以前就使用过批处理,这是我无法提供完整工作代码的原因。) 并且不要忘记下载SendMessage-1.1.2.exe并将其放置到与* .bat文件相同的目录中!