elona吧 关注:71,448贴子:1,109,265

【教程】免费版如何进行自动备份

取消只看楼主收藏回复

(本教程操作系统基于Win11,手机模拟器或者系统版本低于Win10的可能无法使用)
众所周知,由于elona在游戏运行过程中对存档存在实时的读写操作,而非仅在保存时进行写入,因此elona对于断电、卡死、强行关机等意外情况的抗干扰力很差,一旦发生就可能造成坏档。
说白了:elona容易坏档,一旦坏档,无论是几个小时、几十个小时还是几百个小时的努力,就都打水漂啦!
长期支持版自带了自动备份功能,但是需要支付一定的费用进行捐赠才能使用,对于学生等群体来说可能存在一定的难度;另一方面,由于免费版没有经过程序框架上的修改,有些插件、工具或是教程仅适用于免费版;而且,由于长期支持版增加了一些功能,对于一些低性能设备可能造成性能压力;此外,一旦汉化团队停止对长期支持版的维护,游戏将无法启动。
优秀的免费版elona玩家都会有时常手动备份存档的好习惯。然而,手动备份费时费力,并且存在容易误操作、容易遗忘等缺点。
那么,我们要如何在免费版利用windows的批处理程序和任务计划程序进行备份呢?


IP属地:浙江1楼2024-06-27 15:44回复
    二楼备用


    IP属地:浙江2楼2024-06-27 15:45
    回复
      目录:
      一、你可能需要的网盘链接
      二、需要准备的软件、工具或者文件
      三、如何使用快捷方式手动快速备份
      四、如何设置在开机后持续备份
      五、如何设置在游戏启动后一段时间内持续自动备份


      IP属地:浙江3楼2024-06-27 15:47
      收起回复
        一、你可能需要的网盘链接
        除补链接之外,此楼禁止回复,回复则删除。
        所有的文件都不是必须的,你可以手动写入需要的文件。
        但是,由于操作流程繁琐,为了防止有读者无法自行完成,楼主将一些成品直接在度盘内分享出来,可以下载使用。
        链接将放在此楼的回复中。如果链接失效,楼主不会补链接。有好心人的话,可以帮忙补一下。即使没有,这些文件也不是必须的。


        IP属地:浙江5楼2024-06-27 15:50
        收起回复
          二、需要准备的软件、工具或者文件


          IP属地:浙江6楼2024-06-27 15:51
          回复
            如果你仅仅需要“使用快捷方式手动快速备份”,你只需要准备一个用于自动备份的.bat文件(自动备份存档.bat)花和一个用于存放备份文件的空文件夹(下文用“SaveBackup文件夹"来表示,但你可以随意命名它)。
            简单来说,你需要准备:①自动备份存档.bat②SaveBackup文件夹


            IP属地:浙江7楼2024-06-27 16:08
            回复
              如果你希望“在开机后持续备份”,你需要找到Windows自带的“任务计划程序”。你可以百度如何启动它,或者直接按下Windows键+R,然后输入taskschd.msc并运行。此外,你需要准备一个用于消除“自动备份存档.bat”的黑色窗口的.vbs文件(后台自动备份存档.vbs),如果你不需要此功能(能够忍受用电脑的时候动不动跳一个黑框出来,或者你的备份频率非常低),教程中所有“后台自动备份存档.vbs”都使用“自动备份存档.bat”来代替。
              简单来说,你需要准备:①自动备份存档.bat②SaveBackup文件夹③任务计划程序④后台自动备份存档.vbs


              IP属地:浙江8楼2024-06-27 16:08
              回复
                如果你希望”在游戏启动后一段时间内持续自动备份“,你还需要找到”本地安全策略管理工具“。本地安全策略管理工具也是Windows自带的,但是Windows”家庭版“可能没有安装此程序,需要使用一个.cmd文件来完成安装(一次性)。安装完成后(或者你本来就有),你可以百度如何启动它,或者按下Windows键+R,然后输入secpol.msc并运行。
                简单来说,你需要准备:①自动备份存档.bat②SaveBackup文件夹③任务计划程序④后台自动备份存档.vbs⑤本地安全策略管理工具


                IP属地:浙江9楼2024-06-27 16:09
                回复
                  三、如何使用快捷方式手动快速备份


                  IP属地:浙江10楼2024-06-27 16:11
                  回复
                    你可能并不需要自动备份,因为那在理论上会消耗极少量的电脑性能,并且可能导致一些无法预测的、连带的微小问题,或者你学不会/设备不支持自动备份。即使如此,我们也有很好的办法减轻你手动备份的工作量。


                    IP属地:浙江11楼2024-06-27 16:12
                    回复
                      以下是自动备份存档.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


                      IP属地:浙江13楼2024-06-27 16:30
                      收起回复
                        贴吧抽风把“@echo"识别成了”@璐村惂鐢ㄦ埛_000076K馃惥“,请自行改回去


                        IP属地:浙江14楼2024-06-27 16:32
                        回复
                          创建完此文件并且修正完贴吧导致的错误后,运行此文件即可一键备份你的存档。你也可以使用快捷方式来运行此文件。
                          窗口一闪即关闭是正常现象。
                          如果运行后(或者在备份日志文件中)出现奇怪的形似中文的乱码,说明你没有将自动备份存档.bat的编码改为“ANSI”,请仔细阅读前文。不知道如何将编码改为“ANSI”会造成后面的步骤无法进行。


                          IP属地:浙江15楼2024-06-27 16:35
                          回复
                            注意,此文件的后缀名是.bat,而不是.txt。如果你在保存文件时忘记更改后缀,可以通过重命名修改后缀,不要理会弹出的警告。


                            IP属地:浙江16楼2024-06-27 16:37
                            回复
                              四、如何设置在开机后持续备份


                              IP属地:浙江17楼2024-06-27 16:38
                              收起回复