Перейти к содержанию

Автоархивация сейвов на ПК. Рабочая концепция.


Рекомендуемые сообщения

  • Модераторы

А сегодня я расскажу как перестать морочиться по поводу сейвов и забыть о недостаточном количестве слотов сохранений в играх. 

Ссылка на комментарий
Поделиться на другие сайты

  • Модераторы

Итак, 

MultiSaves Backup Tool

Предназначена для бэкапа игровых сейвов.

Ключевые особенности:

  • Архивирует сейвы только тогда, когда игра запущена.
  • Неограниченный список архивируемых игр. Блоки сейвов можно добавить в любой момент.
  • Не требует обслуживания, работает по методу "Настроил и забыл". Разве что добавить игру-другую, но переделывать при этом ничего не нужно.
  • Интервал архивирования можно менять, также в любой момент, простым редактированием двух-трех цифр.
  • В архив добавляется путь к оригинальным сохранениям, если вдруг не помним, где они находятся.
  • Каждый архив содержит в названии визуальную метку времени в формате YYYY-MM-DD_HH-MM-SS_GameName.7z
  • Используется архиватор 7zip
  • В утилите уже заряжено несколько примеров игр, просто скопипастить по аналогии
  • Кроме непосредственно сейвов можно добавить к архиву каталог с модами (переменная ModPath) и бэкапить их тоже. А можно не добавлять.
  • И еще при желании добавить один любой каталог (переменная AddPath) на ваш выбор.
  • Кроме непосредственно запускаемого экзешника, по которому программа определяет "запущенность" игры, можно добавить альтернативный экзешник, который тоже будет отслеживаться, например, кроме VoidTrain.exe еще добавить VoidTrain-Win64-Shipping.exe. Мало ли.
  • Имеется возможность автоматически ограничивать количество сейвов. Программа может избавляться от сейвов старше определенного количества дней
  • Избавление от старых сейвов возможно в двух вариантах: удаление насовсем или перемещение в определенный каталог, для вечного хранения. Настраивается независимо для каждого игрового блока (каждой игры).
  • Есть возможность защиты от удаления любого файла архива, если добавить в его имя восклицательный знак. В этом случае сейв перемещается в подкаталог Imoprtant и удален не будет, даже если в настройках стоит удаление. Например, сейвы сохраняются по именем 2022-12-11.05-10-02_NoMansSky.7z, если мы его переименуем в !_2022-12-11.05-10-02_NoMansSky.7z или даже в 2022-12-11.05-10-02_NoMansSky!!!!.7z, то файл переместится в подкаталог Important и будет жить там вечно.
  • Не нужен дополнительный батник для создания задачи Планировщика. Все делает одна программа.
  • При запуске проверяет, существует ли задание, и если нет - предложит его создать с заданными параметрами.
  • Работает под системной учеткой

 

Перед запуском утилиты следует настроить в ней каталоги и значения, соответствующие вашим намерениям.
Все значения прописаны либо для примера, либо по умолчанию. Какие строки и параметры нужно поменять - указано в самом батнике.

 

Время начала задания для удобства устанавливается с округлением до часа в меньшую сторону. Например, если батник запущен в 13:47 (в режиме Создание задания Планировщика), то начало работы установится на 13:00. Чтоб бэкапилось не как попало, а по круглым числам минут.

 

Немного о том, как грамотно поступать со старыми сейвами, диск же не резиновый:

Первым делом решаем, будем ли вообще чего-нибудь делать с со старыми сейвами. Для этого служит переменная SetOldFilesStatus:
У нее три возможных значения:

  • 0 - ничего не делаем, сейвы будут сохраняться до скончания места на диске.
  • 1 - старые сейвы (старше количества дней определяемых переменной DaysForKeep) будут перемещаться в другой каталог, который мы назначаем и там лежать вечно.
  • 2 - старые сейвы будут удаляться насовсем. Навсегда. R.I.P. Но, разумеется, только те, которые старше количества дней, указанных в DaysForKeep

 

Если выбрали перемещение или удаление, то остается решить, за какое время (количество дней) оставляем сейвы - 7 дней, 14, 30 и т.д.
За это отвечает перменная DaysForKeep, туда и вписывем желаемое значение. Таким образом, в текущем каталоге архивации (переменная SaveArchivePath) будут оставлены сейвы за срок, указанный в переменной DaysForKeep, а все что старше - удалено насовсем или перемещено в более архивный каталог.

 

Еще один тонкий момент - переменная SetOldFilesStatus приоритетней, чем  DaysForKeep. Это значит что если в переменной DaysForKeep будет стоять какое-то число, отличное от нуля (количество дней), а в переменной SetOldFilesStatus у нас ноль (ничего не удалять), то ни удаляться, ни перемещаться сейвы не будут.

 
Текст исходника:
:: =========================================================================
:: MultiSaves Backup Tool v3.0 - by Varset - Universal version - 31.08.2024
:: =========================================================================
@echo off
set da=%date:~6,4%-%date:~3,2%-%date:~0,2%
set ti=%time:~0,2%-%time:~3,2%-%time:~6,2%
set ti=%ti: =0%
set dt=%da%_%ti%
set SetOldFilesStatus=
set DaysForKeep=
Set GameExeAlt=
set ModPath=
set AddPath=

:: === БЛОК ОБЩИХ НАСТРОЕК ===

:: === Общая папка куда будем складывать архивы сейвов для всех игр ===
:: ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
set SaveArchivePath=G:\GamesArchive\_Saves

:: === Путь к архиватору 7z ===
::  ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
set ArchiverPath=C:\Program Files\7-Zip\7z.exe

:: === Путь к каталогу, в котором будут вечно храниться архивы бэкапов сейвов ==
:: (только для перемещения, а не удаления)
::  ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
set BackupsArchivePath=G:\Backups\_Archives

:: === Интервал создания бэкапов, по умолчанию 15 минут ===
:: ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
set interval=15

call :_game1
call :_game2
call :_game3
call :_game4
call :_game5
call :_game6
call :_game7
call :_game8
call :_game9
call :_game10
call :_game11
rem call :_game12
Exit

:: === БЛОКИ ИГРОВЫХ СЕЙВОВ ===
:: Каждый блок - отдельная игра.

:: Пример заполнения для игры No Man's Sky 
:_game1
:: == No Man's Sky ===
:: === Имя исполняемого файла игры ===
::  ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
Set GameExe=NMS.exe
:: === Альтернативное имя исполняемого файла игры ===
::  ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
Set GameExeAlt=NMS-Win64-Shipping.exe
::------------------------------------------------------------
:: === Имя игры или любое другое, оно же название папки, где будут лежать архивы ===
::  ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
set GameName=NoMansSky
::------------------------------------------------------------
:: === Путь к папке, где Steam или игра кладет свои сейвы ===
:: === (то есть откуда будем тащить файлы сейвов) ===
::  ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
set SavePath=c:\Users\Administrator\AppData\Roaming\HelloGames\NMS
::------------------------------------------------------------
:: === За сколько дней оставлять архивы бэкапов. 0 - ничего не удалять.
:: === (все, что старше этого числа, будет удаляться) 
:: === Если переменная SetOldFilesStatus установлена в 0, то неважно какое число тут написано, файлы удаляться не будут
::  ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
set DaysForKeep=0
::------------------------------------------------------------
:: === Старые файлы удалять или перемещать ===
:: 0 - ничего не делать, файлы будут копиться
:: 1 - перемещать в каталог архива (см.. переменную DaysForKeep)
:: 2 - удалять насовсем
::  ЗАПОЛНИТЬ ЭТУ СТРОКУ СВОИМИ ДАННЫМИ
set SetOldFilesStatus=0
::------------------------------------------------------------
:: === Путь к каталогу модов ===
:: === если модов нет, оставьте пустым ====
set ModPath=d:\Steam\steamapps\common\No Man's Sky\GAMEDATA\PCBANKS\MODS\
::------------------------------------------------------------
:: === Путь к дополнительному каталогу, который следует бэкапить ===
:: === если не нужен, оставьте пустым ====
set AddPath=
goto _CheckGameStatus

:_game2
:: === Wanderer ===
Set GameExe=Wanderer.exe
Set GameExeAlt=
set ModPath=
set AddPath=
set GameName=Wanderer
set SavePath=c:\Users\Administrator\AppData\Local\Wanderer
set SetOldFilesStatus=0
set DaysForKeep=0
goto _CheckGameStatus

:_game3
:: === Subnautica ===
Set GameExe=Subnautica.exe
Set GameExeAlt=
set ModPath=
set AddPath=
set GameName=Subnautica
set SavePath=d:\Portable\Subnautica.BigUpdate\SNAppData\
set SetOldFilesStatus=0
set DaysForKeep=0
goto _CheckGameStatus

:_game4
:: === Subnautica Below Zero ===
Set GameExe=SubnauticaZero.exe
Set GameExeAlt=
set ModPath=
set AddPath=
set GameName=SubnauticaZero
set SavePath=d:\Portable\SubnauticaZero.Update.49371\SNAppData\
set SetOldFilesStatus=0
set DaysForKeep=0
goto _CheckGameStatus

:_game5
Set GameExe=Firmament.exe
Set GameExeAlt=
set ModPath=
set AddPath=
set GameName=Firmament
set SavePath=c:\Users\Administrator\AppData\Local\Firmament\
set SetOldFilesStatus=0
set DaysForKeep=0
goto _CheckGameStatus

:_game6
Set GameExe=FactoryGame.exe
Set GameExeAlt=
set ModPath=
set AddPath=
set GameName=Satisfactory
set SavePath=c:\Users\Administrator\AppData\Local\FactoryGame\
set SetOldFilesStatus=0
set DaysForKeep=0
goto _CheckGameStatus

:_game7
Set GameExe=Planet Crafter.exe
Set GameExeAlt=
set ModPath=d:\Steam\steamapps\common\The Planet Crafter\BepInEx\plugins\
set AddPath=
set GameName=PlanetCrafter
set SavePath=C:\Users\Administrator\AppData\LocalLow\MijuGames\
set SetOldFilesStatus=1
set DaysForKeep=30
goto _CheckGameStatus

:_game8
Set GameExe=ForeverSkies.exe
Set GameExeAlt=ForeverSkies-Win64-Shipping.exe
set ModPath=
set AddPath=
set GameName=ForeverSkies
set SavePath=C:\Users\Administrator\AppData\Local\ProjectZeppelin
set SetOldFilesStatus=1
set DaysForKeep=30
goto _CheckGameStatus

:_game9
Set GameExe=Breathedge.exe
Set GameExeAlt=
set ModPath=
set AddPath=
set GameName=Breathedge
set SavePath=d:\Steam\steamapps\common\Breathedge\Breathedge\Saved\
set SetOldFilesStatus=0
set DaysForKeep=0
goto _CheckGameStatus

:_game10
Set GameExe=VoidTrain.exe
Set GameExeAlt=VoidTrain-Win64-Shipping.exe
set ModPath=
set AddPath=
set GameName=Voidtrain
set SavePath=c:\Users\Administrator\AppData\Local\VoidTrain\
set SetOldFilesStatus=0
set DaysForKeep=0
goto _CheckGameStatus

:_game11
Set GameExe=Grounded.exe
set GameName=Grounded
set SavePath=c:\Users\Administrator\Saved Games\Grounded\
set SetOldFilesStatus=0
set DaysForKeep=0
goto _CheckGameStatus

rem :_game12
rem Set GameExe=NMS.exe
rem set GameName=NoMansSky
rem set SavePath=c:\Users\Administrator\AppData\Roaming\HelloGames\NMS\
rem set SetOldFilesStatus=0
rem set DaysForKeep=0
rem goto _checktasks

::exit

:_GameSavesBackup
md %SaveArchivePath%
md %BackupsArchivePath%
set FileName=%dt%_%GameName%.7z
:: Если переменные ModPath и AddPath не определены, кавычки ставить не нужно, иначе ощибка архивации
if "%ModPath%" NEQ "" set "quotam=""
if "%AddPath%" NEQ "" set "quotap=""
"%ArchiverPath%" a -mx5 -ssw "%SaveArchivePath%\%GameName%\%FileName%" "%SavePath%" %quotam%%ModPath%%quotam% %quotap%%AddPath%%quotap%
set filenamemark=*!*.* /B
md %SaveArchivePath%\%GameName%\Important\
for /f %%f IN ('dir %SaveArchivePath%\%GameName%\%filenamemark%' ) do move %SaveArchivePath%\%GameName%\%%f %SaveArchivePath%\%GameName%\Important\
if %SetOldFilesStatus% EQU 0 exit /b
if %DaysForKeep% NEQ 0 goto _checkcondition
exit /b

:_checkcondition
if %SetOldFilesStatus% EQU 1 goto _moveoldfiles
if %SetOldFilesStatus% EQU 2 goto _deloldfiles
exit /b

:_CheckGameStatus
call :_checkschtasks
tasklist | findstr /i "%GameExe%"
if %errorlevel%==0 goto _GameSavesBackup
if [%GameExeAlt%] NEQ [] tasklist | findstr /i "%GameExeAlt%"
if %errorlevel%==0 goto _GameSavesBackup
exit /b

:_deloldfiles
:: === Для удаления старых файлов ===
forfiles -p "%SaveArchivePath%\%GameName%" -m *.7z -d -%DaysForKeep% -c "cmd /c del /q @path"
exit /b

:_moveoldfiles
:: === Для перемещения старых файлов ===
md %BackupsArchivePath%\%GameName%
forfiles -p "%SaveArchivePath%\%GameName%" -m *.7z -d -%DaysForKeep% -c "cmd /c move /y @path %BackupsArchivePath%\%GameName%"
exit /b

::===================================================
:: === Проверка на установленную задачу Планировщика ===

:_checkschtasks
set batfilename=%~nx0
set CurrentPath=%~dp0
set SMBPath=%CurrentPath%%batfilename%
@schtasks /change /tn "SavesMultiBackup" /ru "" /ri %interval% 1>NUL 2>&1
If %ERRORLEVEL% EQU 1 GOTO _NOTFOUND
exit /b

:_NOTFOUND
@echo.
@echo Задача для бэкапа не существует. Создать такую задачу? (Y/N)?
@echo.
@echo (Если вы хотите переложить этот файл в другое место, нажмите N, 
@echo скопируйте этот файл в новое место и запустите его оттуда)
@echo.
@set "choice="
@Set /p choice="Выберите Y или N и нажмите Enter: "
@echo.
if not defined choice goto _NOTFOUND
if /i "%choice%"=="y" (GOTO _createtask)
if /i "%choice%"=="n" (exit)
goto _NOTFOUND

:_createtask
set timewtz=%time:~0,2%
set timewz=%timewtz: =0%
set needtime=%timewz%:00

@schtasks /create /SC DAILY /ST %needtime% /RI %interval% /RU "" /DU 24:00 /F /NP /TN SavesMultiBackup /RL HIGHEST /TR "%SMBPath%" 1>NUL 2>&1
@Echo.
@echo Задача создана. Нажмите любую кнопку для запуска бэкапов.
@echo Не забывайте где у вас лежит этот файл, перемещать его нельзя.
@echo.
@pause 1>NUL 2>&1
exit /b

 

Так же прикрепляю сам батник: _MultiSavesBackupTool-3.0.zip

 

Это не прототип, программа абсолютно рабочая, лично пользуюсь уже почти два года.

 

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...

Важная информация

Правила пользования сайтом Условия использования