蔡文洋
蔡文洋
发布于 2024-01-27 / 112 阅读

游戏数据自动备份

游戏数据自动备份

下载

点我下载

源码:

@echo off
rem windows服务器游戏存档数据自动备份 自动脚本by 蔡文洋V1.111

rem ================开发者的更新公告======================
rem V1.0自动启动服务器和Frp防崩自动重启
rem V1.1增加存档定时备份功能 更多的自定义选项
rem V1.11删除了Frp服务的启动检测
rem V1.111删除了游戏服务的启动检测
rem =====================================================================================================

rem *****************************************************
rem 脚本自定义设置区域
rem *****************************************************
rem =====================================================================================================
rem *****************************************************

rem 进程检测时间(单位:秒)(建议大于等于60因为自动存档会在同一分钟内反复操作 虽然影响不大... 而且也会自动覆盖)
set detection_interval=60
rem *****************************************************

rem =====================================================
rem 自动备份设置
rem *****************************************************
rem 备份的文件夹路径(游戏服务器存档位置)
set server_save_path="D:\Game\saved"

rem 保存的目的地
set destination_path="D:\Game\saved_backup"

rem 保存的时间间隔(单位:分)
set /A save_time_interval=30
rem *****************************************************


rem =====================================================
rem 以下是代码区域 只修改上面的
rem =====================================================
rem ====================================================================================================

rem 初始化时间信息
set /A last_save_time_m=%time:~3,2%
set last_save_time_all=检测到初次启动脚本--稍后自动存档

goto check

:auto_save

cls

echo 备份中...
echo.

rem xcopy会递归地复制整个文件夹以及其子文件夹和文件到目标文件夹中 
rem `/E` 表示复制文件夹及其子文件夹和文件
rem `/I` 表示如果目标路径不存在并且包含多个文件或目录,则假设目标路径是要复制的文件,而不是询问用户是否要复制目录或多个文件
rem `/Y` 表示在复制过程中不会提示用户确认覆盖现有的目标文件。

start cmd /C "xcopy /E /I /Y %server_save_path% %destination_path%\"%date:~0,4%年%date:~5,2%月%date:~8,2%日_%time:~0,2%时%time:~3,2%分"_自动存档"
echo 备份成功(%destination_path%)
echo.

rem 记录上次存档时间
set /A last_save_time_m=%time:~3,2%
set last_save_time_all=%date:~0,4%年%date:~5,2%月%date:~8,2%日_%time:~0,2%时%time:~3,2%分


rem 等待3s
timeout /t 3 /nobreak >nul

rem 清屏
cls
goto wait_next


rem 设置循环点check检查点

:check

echo.

echo ===================================================
echo 数据自动备份V1.11
echo ===================================================
echo ===================================================
echo 已设置每%save_time_interval%分保存服务器存档一次
echo ===================================================
echo.

rem 等待1s
timeout /t 1 /nobreak >nul


rem 当前检测时间
set /A check_time_m = %time:~3,2%

echo.
echo ===================================================
echo.
echo 当前检测时间:%date:~0,4%年%date:~5,2%月%date:~8,2%日_%time:~0,2%时%time:~3,2%分
echo.
echo 上次存档时间:%last_save_time_all%
echo.

rem 判断自动存档时间点
if %check_time_m% gtr %last_save_time_m% (
	set /A temp_num_m =%last_save_time_m%+%save_time_interval%-%check_time_m%
) else if %check_time_m% lss %last_save_time_m% (
	set /A temp_num_m =%last_save_time_m%-%check_time_m%-%save_time_interval%
) else (
	set /A temp_num_m =0
)

echo 距离下次备份还有%temp_num_m%分
echo.

rem 存档点
if %temp_num_m% == 0 (echo 3s后自动备份存档 && timeout /t 3 /nobreak >nul && goto auto_save)

rem 等待下次检测点
:wait_next
rem 等待1s
timeout /t 1 /nobreak >nul

echo %detection_interval%s后进入下一次检测
echo.

rem 等待设定的秒数detection_interval后再次检测
timeout /t %detection_interval% /nobreak >nul

rem 清屏
cls

rem 进入下一次循环
goto check