我的环境
系统:Windows Server 2022 DataCenter(桌面环境)
服务端:fabirc 1.25.5
需要的软件:
- mcrcon
- 打开rcon
- 7zip
备份代码
创建一个txt,或者直接创建一个bat,然后记得修改环境部分的变量内容为您自己的信息
@echo off
setlocal ENABLEDELAYEDEXPANSION
:: ====== 配置路径 ======
REM 具体注释请看博文代码区块下面的解释部分
set "SERVER_DIR="
set "BACKUP_DIR="
set "TEMP_DIR=%BACKUP_DIR%\tmp"
set "ZIP_EXE=C:\Program Files\7-Zip\7z.exe"
set "MCRCON_EXE=mcrcon.exe"
set "RCON_HOST=localhost"
set "RCON_PORT=25575"
set "RCON_PASSWORD="
set "LOG_FILE=%BACKUP_DIR%\backup_log.txt"
:: ====== 生成时间戳(通用格式)======
for /f "tokens=2 delims==." %%a in ('"wmic os get LocalDateTime /value"') do set ldt=%%a
set YYYY=%ldt:~0,4%
set MM=%ldt:~4,2%
set DD=%ldt:~6,2%
set HH=%ldt:~8,2%
set MIN=%ldt:~10,2%
set "TIMESTAMP=%YYYY%-%MM%-%DD%_%HH%-%MIN%"
set "ZIP_NAME=backup_%TIMESTAMP%.zip"
set "ZIP_PATH=%BACKUP_DIR%\%ZIP_NAME%"
:: ====== 日志开始 ======
echo. >> "%LOG_FILE%"
echo [%YYYY%-%MM%-%DD% %HH%:%MIN%] === 开始执行备份任务 === >> "%LOG_FILE%"
:: ====== 通知:开始备份 ======
%MCRCON_EXE% -H %RCON_HOST% -P %RCON_PORT% -p %RCON_PASSWORD% ^
"tellraw @a [{\"text\":\"[系统] \",\"color\":\"gold\"},{\"text\":\"服务器即将备份,请暂时停止操作。\",\"color\":\"yellow\"}]"
:: ====== 强制保存游戏数据 ======
%MCRCON_EXE% -H %RCON_HOST% -P %RCON_PORT% -p %RCON_PASSWORD% "save-off"
%MCRCON_EXE% -H %RCON_HOST% -P %RCON_PORT% -p %RCON_PASSWORD% "save-all"
ping -n 2 127.0.0.1 > nul
:: ====== 清理旧临时目录 ======
if exist "%TEMP_DIR%" (
echo 清理旧临时目录中... >> "%LOG_FILE%"
rmdir /s /q "%TEMP_DIR%"
)
mkdir "%TEMP_DIR%"
:: ====== 临时复制核心数据 ======
echo 正在复制 world ... >> "%LOG_FILE%"
robocopy "%SERVER_DIR%\world" "%TEMP_DIR%\world" /E /R:0 /W:0 /XF session.lock
echo 正在复制 mods ... >> "%LOG_FILE%"
robocopy "%SERVER_DIR%\mods" "%TEMP_DIR%\mods" /E /R:0 /W:0
echo 正在复制 config ... >> "%LOG_FILE%"
robocopy "%SERVER_DIR%\config" "%TEMP_DIR%\config" /E /R:0 /W:0
echo 正在复制 server.properties 等 ... >> "%LOG_FILE%"
robocopy "%SERVER_DIR%" "%TEMP_DIR%" server.properties ops.json whitelist.json /R:0 /W:0
:: ====== 压缩临时目录到 ZIP ======
echo 开始压缩 %ZIP_NAME% ... >> "%LOG_FILE%"
"%ZIP_EXE%" a -tzip "%ZIP_PATH%" "%TEMP_DIR%\*" -mx5 -bb1 >> "%LOG_FILE%" 2>&1
set ZIP_RESULT=%ERRORLEVEL%
:: ====== 判断压缩结果 ======
if %ZIP_RESULT% LEQ 1 (
echo [%TIMESTAMP%] ✅ 备份成功(含警告码 %ZIP_RESULT%):%ZIP_NAME% >> "%LOG_FILE%"
) else (
echo [%TIMESTAMP%] ❌ 备份失败(错误码:%ZIP_RESULT%) >> "%LOG_FILE%"
goto CLEANUP
)
:: ====== 清理临时目录 ======
:CLEANUP
echo 正在清理临时目录 ... >> "%LOG_FILE%"
rmdir /s /q "%TEMP_DIR%"
:: ====== 恢复保存 + 通知 ======
%MCRCON_EXE% -H %RCON_HOST% -P %RCON_PORT% -p %RCON_PASSWORD% "save-on"
%MCRCON_EXE% -H %RCON_HOST% -P %RCON_PORT% -p %RCON_PASSWORD% ^
"tellraw @a [{\"text\":\"[系统] \",\"color\":\"gold\"},{\"text\":\"服务器备份完成,感谢配合。\",\"color\":\"green\"}]"
:: ====== 日志结尾 ======
echo [%TIMESTAMP%] === 备份任务完成 === >> "%LOG_FILE%"
pause
endlocal
变量解释
变量名 | 解释 |
SERVER_DIR | 服务端存放的位置 |
BACKUP_DIR | 服务端备份存放的位置 |
TEMP_DIR | 在程序设计中,为了防止因为打包时,突然出现独占锁 或者占用导致数据保存失败不过一般不需要进行配置, 默认是在 BACKUP_DIR 下面创建一个tmp目录进行保存 |
ZIP_EXE | 7zip执行文件的路径,需要使用绝对路径 |
MCRCON_EXE | 用于定位MCRCON的位置(很重要,用于跟服务端进行通信) |
RCON_HOST | RCON协议服务器地址,一般是localhost |
RCON_PORT | RCON协议服务器端口 |
RCON_PASSWORD | RCON协议密码 |
LOG_FILE | 日志存放路径 |
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容