以下是自动备份存档.bat的内容,你必须在记事本软件中将此文件“另存为”(Ctrl+Shift+S),将“编码”改为“ANSI”,再进行保存。你可以保存到任何普通的位置,无需将此文件放到特定文件夹。
必须将“set bakPath=”后面的路径改为你的游戏存档文件夹,并且不能缺少末尾的“/”。
将“set bakTargetPath=”后面的路径改为你的备份文件夹(上文提到的SaveBackup,事实上文件夹名可以自己决定),也不能缺少末尾的“/”。
将“set DaysAgo=”后面的数字改为你希望备份保留的天数。我这里写10000天意味着很久都不会自动删除备份,你可以自己决定写多少
内容如下:
:: 本脚本能备份指定文件夹下的所有文件夹并以日期的形式来存放每次备份的文件夹,
:: 同时,能删除指定时间之前的备份文件夹。
:: bakPath 要备份的目录,必须以\结尾
:: bakTargetPath 备份文件存储路径,必须以\结尾
:: DaysAgo 该参数表示要删除多少天之前的备份
:: logDaysAgo 该参数表示要删除多少天之前的日志文件
:: 该脚本作者:Blademainer
@璐村惂鐢ㄦ埛_000076K馃惥 off
:: for /f "tokens=1-3 delims=- " %%1 in ("%date%") do set ttt=%%1%%2%%3
:: for /f "tokens=1-3 delims=.: " %%1 in ("%time%") do set ttt=%ttt%-%%1%%2%%3
:: 要备份的目录,必须以\结尾
set bakPath=D:\……\elonaplus2.22\save\
:: 备份文件存储路径,必须以\结尾
set bakTargetPath=D:\……SaveBackup\
:: 该参数表示要删除多少天之前的备份
set DaysAgo=10000
:: 该参数表示要删除多少天之前的日志文件
set logDaysAgo=%DaysAgo%
set logDir=%bakTargetPath%\log\
set dateStr=%date:~0,4%%date:~5,2%%date:~8,2%
set timeStr=%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
set indexStr=%dateStr%_%timeStr%
for /f "tokens=1-3 delims=- " %%1 in ("%time%") do set beautyTime=%%1%%2%%3
set logFile=%logDir%%indexStr%.log
call :LastFolder %bakPath% bakName
set bakDataFolder=%bakTargetPath%%indexStr%\
set bakDataPath=%bakDataFolder%%bakName%\
echo bakDataPath======%bakDataPath%
if not exist %logDir% mkdir %logDir%
echo 开始备份文件夹
echo ------------------ %date% %beautyTime% ------------------ >> %logFile%
if not exist %bakDataPath% mkdir %bakDataPath%
xcopy %bakPath%* %bakDataPath% /c/s/e/y/r >> %logFile%
IF ERRORLEVEL 1 ECHO ------------------ 文件拷贝失败 ------------------ >> %logFile%
IF ERRORLEVEL 0 ECHO ------------------ 文件拷贝成功 ------------------ >> %logFile%
call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
set /a PassDays-=%DaysAgo%
call :DaysToDate %PassDays% DstYear DstMonth DstDay
set DstDate=%DstYear%%DstMonth%%DstDay%
echo %DaysAgo%天前的日期是%DstDate%
call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% logPassDays
set /a logPassDays-=%logDaysAgo%
call :DaysToDate %logPassDays% DstYear DstMonth DstDay
set logDstDate=%DstYear%%DstMonth%%DstDay%
echo %logDaysAgo%天前的日期是%logDstDate%
echo 开始删除数据文件夹
echo 开始删除数据文件夹 >> %logFile%
setlocal enabledelayedexpansion
for /f "delims=" %%s in ('dir /b /ad "%bakTargetPath%"') do (
set d=%%s
set dateParse=!d:~0,8!
echo 截取的日期为:!dateParse!
set stDate=%DstDate%
:: 如果该文件夹的日期小于该删除的备份日期,则删除该文件夹
set path=%bakTargetPath%!d!
echo 当前的路径!path!
if !dateParse! lss !stDate! call :DeleteDirectory !path!
)
echo 开始删除日志文件夹%logDir%
echo 开始删除日志文件夹 >> %logFile%
for /f "delims=" %%s in ('dir /a-d /b "%logDir%"') do (
set d=%%s
set dateParse=!d:~0,8!
echo 截取的日期为:!dateParse!
set stDate=%logDstDate%
:: 如果该文件夹的日期小于该删除的备份日期,则删除该文件夹
set path=%logDir%!d!
echo 当前的路径!path!
if !dateParse! lss !stDate! call :DeleteFile !path!
)
endlocal
goto :eof
:LastFolder %1 folderName
Setlocal ENABLEDELAYEDEXPANSION
set string=%1
set ch=\
set last=%string:~-1%
if "%last%"=="%ch%" (set "string=%string:~0,-1%")
set str=%string%
:next
if not "%str%"=="" (
if "!str:~-1!"=="%ch%" goto last
set rsString=!str:~-1!%rsString%
set "str=%str:~0,-1%"
goto next
)
:last
set rsString=%rsString: =%
echo 结果:%rsString%
endlocal&set %2=%rsString%&goto :EOF
:DeleteDirectory %1
setlocal ENABLEEXTENSIONS
echo ------------------ %1 ------------------
rd /s /q %1
echo ------------------ 成功删除文件夹: %1 ------------------ >> %logFile%
endlocal&goto :EOF
:DeleteFile %1
setlocal ENABLEEXTENSIONS
echo ------------------ %1 ------------------
del /f /s /q /a %1
echo ------------------ 成功删除文件: %1 ------------------ >> %logFile%
endlocal&goto :EOF
:DateToDays %yy% %mm% %dd% days
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :EOF
:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :EOF