我想知道是否可以让 Windows 批处理脚本将命令发送到三个已经运行的 .jar 文件实例。 在这种情况下,打开的 .jar 文件对应于一个 bungeeCord 实例、一个 survival 实例和一个 hub 实例。每一个 这些 .jar 实例一起构成了整个 Spigot Minecraft 服务器。 (看图片)
目前,为了正常关闭每个服务器/.jar 实例,您需要手动输入“停止” 在 survival 和 hub 实例的命令行界面中输入命令。你必须输入“end”才能关闭 优雅地创建 bungeeCord 实例。
为了自动化此过程,我想编写一个批处理脚本,允许我发送 'stop' 和 'end' 命令 一键访问当前正在运行的 .jar 实例,而不必在每个 .jar 上手动键入每个命令 实例。
实际上我已经通过编写以下批处理脚本成功地自动启动了每个 .jar 实例进程 这可能有帮助:
echo off
cd D:\Projects\Servers\"CRAFT412 Server Desktop"\BungeeCord
start "BungeeCord" java -Xms512M -Xmx512M -jar BungeeCord.jar
cd D:\Projects\Servers\"CRAFT412 Server Desktop"\hub
start "hub" java -Xms512M -Xmx1G -XX:+UseConcMarkSweepGC -jar spigot.jar
cd D:\Projects\Servers\"CRAFT412 Server Desktop"\survival
start "survival" java -Xms512M -Xmx1G -XX:+UseConcMarkSweepGC -jar spigot.jar
运行此脚本后,所有三个必需的 .jar 实例都会打开并运行,如上图所示。
如果您还可以看到文件夹结构,这也可能会有所帮助,因此我提供了该图像:
start.bat 文件对应于上面的代码,用于启动所有三个 .jar 实例。
如有任何帮助,我们将不胜感激。
谢谢。
请勿使用
taskkill
,杀死进程结果数据丢失!@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:112 /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 文件相同的目录中!
尝试这样的事情:
@echo off
taskkill /F /IM java.exe
或者您命名所有服务器,例如 server(在启动脚本中使用 title Server) 然后
@echo off
taskkill /F /IM java.exe /FI "Server"
您还可以将服务器命名为
服务器 - CityBuild
服务器 - 大厅 ...
然后使用
@echo off
taskkill /F /IM java.exe /FI "Server*"
这太棒了,SendMessage 正是我所需要的