写我的世界服务器端bat文件,核心是在一个文本文件里写好启动Java服务端程序的命令行,把后缀名改成.bat,双击就能自动执行,省去每次手动输入命令的麻烦。
很多服务器管理员第一次接触bat文件,都以为是什么高深技术,其实它就相当于一个快捷方式,把启动服务器那串又长又容易记错的命令,一次性录进去,下面我从零开始拆解,把写法、参数调优、常见报错一次讲透。
我的世界服务器端怎么写bat文件:从第一行命令说起
先看一个最基础的bat模板
如果你用的是官方服务端或者其他核心(比如Paper、Spigot),在Windows服务器上,新建一个start.bat如下:
@echo off
java -Xmx2G -jar minecraft_server.jar -nogui
pause
把这段保存为.bat后缀,放到服务端核心文件(minecraft_server.jar)同一个文件夹里,双击运行就行。
逐行解释一下:
@echo off:关掉命令回显,让黑窗口干净些。java:调用Java运行环境。-Xmx2G:给服务器分配最大2GB内存,根据你机器的物理内存和玩家数量调整,比如4G、8G。-jar minecraft_server.jar:告诉Java去执行这个jar包。-nogui:不打开图形窗口,只跑控制台,如果用的是官方服务端,不写这个参数会弹一个GUI界面,占资源还容易误关。pause:服务器关闭后窗口保持打开,方便你截图或看报错信息,如果不加,服务器一停窗口就闪没了,想查日志只能去翻文件。
这是最朴素的版本,能用,但不够好,下面看进阶写法。
进阶写法:加上变量和自动重启
服务器跑久了,内存泄漏、实体堆积、插件报错,难免会崩,崩了之后你人在外面,没法马上远程手动重启,这时候就要靠bat帮你兜底。
@echo offMy Minecraft Server
cd /d %~dp0
:start
echo 服务器正在启动...
java -Xms2G -Xmx4G -jar paper-1.20.1-196.jar -nogui
echo 服务器崩溃或停止,10秒后自动重启...
timeout /t 10
goto start
这个版本多了几个功能:
:设置窗口标题,多开服务器时方便区分。
cd /d %~dp0:自动切换到bat所在的目录,以免你从其他路径双击bat时,Java找不到jar文件。start和goto start:构成一个循环,服务器进程结束后等待10秒,再次启动,这样遇到偶发性崩溃就能自动拉起来,不至于长时间宕机无人知。
-Xms2G是初始内存,设置成和最大内存一样,能避免JVM在运行时反复扩缩内存带来的性能抖动,行业共识认为,生产环境里Xms和Xmx设为相同值更稳。
给bat加上“专属JVM参数”
这一步是你和资深服务器管理员拉开差距的地方,同样是开服,别人用2G内存跑得比你的4G还稳,多半是JVM启动参数调得更好,推荐一个在Paper/Spigot社区里广泛使用的优化组合:
java -jar -Xmx4G -Xms4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 paper-1.20.1.jar -nogui
参数多,但别慌,挑几个关键的记住:
-XX:+UseG1GC:用G1垃圾回收器,比默认GC在服务器场景下更稳,能减少卡顿。-XX:MaxGCPauseMillis=200:把GC停顿时间尽量控制在200毫秒以内。-XX:+DisableExplicitGC:禁用系统显式GC调用,防止某些插件乱触发全线卡顿。-XX:+AlwaysPreTouch:启动时就把内存一次性占满,避免运行中向系统申请内存时卡顿。
把这一长串参数合在一起,让JVM启动时一次性吃下全部内存,稳定性和TPS都会有比较明显的改善,但这套参数不适合所有核心,Mohist或者Arclight这类模组端要用更保守的参数,不然容易出兼容问题。
我的世界服务器端bat文件打不开或闪退怎么办
很多新手遇到的第一个难题,不是不会写,而是双击bat后窗口一闪就没了,先说结论:八成是Java没装对,或者jar路径不对。
排查步骤
- 先确认Java版本,1.20及以上版本服务端要求Java 17或更高,如果装了Java 8,双击运行老版本服务端可能没问题,换新版服务端就直接闪退,在cmd里输入
java -version查一下,一眼便知。 - 确认安装的是JRE还是JDK,很多服务端核心需要JDK环境里的
javac工具,只装JRE会报缺类,直接装OpenJDK 17或21最省事,别用什么自带魔改版Java。 - 检查jar文件名是否和bat里写的一致。
paper-1.20.1-196.jar如果实际文件名是paper-1.20.1-196.jar (1).jar,那肯定启动不了,文件名里不能有空格和括号,下载文件后先重命名成简短的名字,比如server.jar,再写进bat里。
在bat里加一行“报错留存”
闪退的核心问题是窗口直接关了,你想看报错都来不及,改一下bat:
@echo off
java -Xmx4G -jar server.jar -nogui
echo 服务器进程异常退出,错误码:%errorlevel%
pause
%errorlevel%是Java进程退出时返回的代码,正常情况下是0,如果不为0,至少说明进程不是正常关闭的,但这一招还不够,更好的做法是把启动日志直接写进文件:
java -Xmx4G -jar server.jar -nogui > latest_boot.log 2>&1
> latest_boot.log作用是让Java输出的所有信息写进日志文件,2>&1把错误输出也一起塞进去,这样不管崩没崩,打开那个log文件就能看到完整的报错堆栈,服务器管理圈混得久了,你会发现排查问题全靠这招。
路径里有中文或空格怎么处理
如果你的服务器文件夹路径带中文,比如E:\我的世界\1.20服务端\,有些Java版本会读取不到,解决方式很简单:给cd /d %~dp0这行保留,bat文件里所有路径都引用绝对路径时要加英文双引号。
cd /d "E:\我的世界\1.20服务端"
java -jar "E:\我的世界\1.20服务端\server.jar" -nogui
我的世界服务器端bat文件如何设置定时重启和开机自启
服务器内存泄漏在长时间运行后不可避免,插件越装越多,实体和区块数据堆积,内存占用会像滚雪球一样涨,业内专家指出,每24到48小时定时重启一次服务器,是维护稳定性的基本操作,很多人用Linux的cron定时任务,但也有部分玩家用的是Windows服务器,这时候还得靠bat。
用批处理实现定时重启
思路是:用一个bat脚本定时检测服务器进程的内存占用,超过阈值就执行重启,但要写成纯bat比较笨重,配合计划任务更靠谱。
写两个文件:
restart.bat:负责执行停止命令、等待游戏自动保存、强制结束进程,然后重新启动。- 配合Windows任务计划程序设定每天凌晨4点触发这个bat。
@echo offRestart Server
echo 向服务器控制台发送stop指令...
echo stop >> server_stdin.txt
timeout /t 30
echo 等待30秒,强制结束Java进程
taskkill /F /IM java.exe
timeout /t 5
echo 重启服务器
call start.bat
有的服务端支持通过标准输入流读取控制台命令,通过往server_stdin.txt里写stop,相当于在控制台敲了stop,给服务器30秒时间做保存和玩家踢出,然后强制结束java.exe进程,再调用start.bat拉起来。
开机自启怎么做
如果服务器装在Windows上,重启服务器电脑后想自动开服,把bat文件的快捷方式扔进启动文件夹即可。
具体操作路径:按Win + R,输入shell:startup,回车打开启动文件夹,把start.bat的快捷方式拖进去,下次电脑开机,bat就会自动执行。
这里注意一个坑:如果bat里有pause命令,开机后窗口会卡在“按任意键继续”那里,不会真正启动服务器,所以自启用bat一定要把pause去掉,或者改成timeout /t 3 >nul短暂停留。
我的世界服务器端bat文件内存和核心怎么选
常见服务端核心适配建议
整理了一个公开社区数据的对照表,供参考:
| 服务端核心 | 适用场景 | 建议内存下限 | 建议JVM参数 |
|---|---|---|---|
| 原版官方服务端 | 纯原版生存,无插件 | 2G | 简洁参数即可,无需复杂调优 |
| Spigot | 中小型插件服 | 4G | 可适度使用G1GC基础参数 |
| Paper | 大型插件服,玩家在线多 | 4G-8G | 推荐使用上面的G1GC优化参数 |
| Mohist | 模组+插件混合服 | 6G-10G | 慎用激进GC参数,保守为主 |
| Arclight | 模组+插件混合服 | 6G-10G | 同上,注意Forge版本兼容 |
如果你的玩家主要来自国内
国内玩家联机场景下,服务器带宽远比内存更敏感,很多玩家问一个问题:我的世界服务器端怎么写bat文件才能降低延迟?答案不是说把内存调大就行,而是要把-Xmx和Java线程参数相匹配,在bat里加上-XX:ActiveProcessorCount=4可以限制JVM只使用4个CPU核心,避免和系统其他进程争抢,如果你的机器是8核以上的独立服务器,这一步很有效。
另一个和延迟相关的参数是-Dfile.encoding=UTF-8,不要小看它,服务器控制台里中文插件名称乱码,多半是编码不对,bat里加上这行参数,日志输出中文就不会乱码:
java -Dfile.encoding=UTF-8 -Xmx4G -jar server.jar -nogui
至于服务器租赁预算,国内主流云服务商比如简米云、酷番云的轻量应用服务器,4核8G内存的配置,一个月大致几百元价位,租服务器前先问清楚CPU是不是独享的,共享CPU的机器跑MC人多时会明显卡顿。
Q&A:我的世界服务器端bat常见问题速查
问:服务端bat和sh有什么区别,Windows和Linux能共用启动脚本吗?
不能共用,bat是Windows批处理,sh是Linux Shell脚本,两者语法完全不同,比如快速怼上@echo off和#!/bin/sh就是两个世界的语言,如果服务器打算长期跑在Linux上,建议花半小时学一下sh脚本基础,网上有大把现成模板,如果你只是个人开服,Windows的bat完全够用。
问:服务器端bat文件里的“-nogui”参数是必须的吗?
对于官方服务端来说是强烈建议的,去掉之后会弹出一个Swing图像化界面,显示在线玩家和TPS图表,看着挺酷,但它会额外占用内存和CPU资源,在性能有限的服务器上会带来肉眼可见的卡顿,对于Paper这类核心,本身就不带GUI,写不写都无所谓。
问:bat可以做一键备份地图吗?
可以,在bat里用xcopy或robocopy命令,把world文件夹复制到备份目录,配合日期变量生成带时间戳的备份文件夹,比如这样:
@echo off
set backupdir=D:\backup\world_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%
xcopy /E /I /Y world "%backupdir%"
执行完这段,世界文件夹就会被完整复制到D盘的backup目录下,文件名带当天日期和时分,方便按时间回滚。
最终汇总一下:我的世界服务器端怎么写bat的核心要点就三句话写对Java启动命令,内存参数和GC参数按需调整,配合计划任务和自动重启脚本保障稳定运行,从基础模板到JVM优化,从闪退排查到定时任务,照着实操,一台稳定运行的小型服务器完全不在话下。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/794037.html


