Ограничить разбиение архива 7-Zip на количество ревизий для резервного копирования - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь создать пакетный сценарий, чтобы взять каталог в Windows и сжать его с помощью 7-zip, используя пакетный сценарий, но ограничить максимальный размер файла каждой части сжатия максимум 4 ГБ каждая, ограничивая общий объемсжатие ревизий устанавливается на 7 (для еженедельного резервного копирования с понедельника по воскресенье).Самый старый будет удален при следующем задании резервного копирования.

Я попытался поиграть с кодом REM CHECK FOR REVISIONS, но у меня недостаточно знаний, чтобы понять, как это сделать.

@ECHO OFF

REM Script created for AVIMark Backup
REM Install 7-zip and make sure to create an environment variable to     allow for shortcuts
REM https://www.7-zip.org/download.html
REM set PATH=%PATH%;C:\Program Files\7-Zip\
REM echo %PATH%
REM 7z

REM 7ZIP ENVIRONMENT VARIABLE PATH
set PATH=%PATH%;C:\Program Files\7-Zip\
7z
cls

REM SET SOURCE, DESTINATION AND REVISION AMOUNT VARIABLES
SET source="C:\AVImark"
SET destination="C:\AVImarkBackup"
SET revisions=7

REM Change Directory to the source data folder
cd "%source%"

REM Run the command to compress the directory, gather the date stamp and insert compressed file into destination folder
7z a -r -v4g "%destination%\%DATE:~7,2%.%DATE:~4,2%.%DATE:~-4% Backup".7z

REM CHECK FOR REVISIONS
cd "%destination%"
for /f "skip=%revisions% eol=: delims=" %%F in ('dir /b /o-d /a-d *.7z') do @del "%%F"

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ

Я бы хотел, чтобы каждый набор резервных копий (в формате даты) был ограничен всего 7 ревизиями.

, то есть: https://imgur.com/a/Q50n0bD

ACTUALРЕЗУЛЬТАТЫ

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

1 Ответ

0 голосов
/ 06 июня 2019
@echo off
setlocal

rem Script created for AVIMark Backup
rem Install 7-zip and make sure to create an environment variable to allow for shortcuts
rem https://www.7-zip.org/download.html
rem set PATH=%PATH%;C:\Program Files\7-Zip\
rem echo %PATH%
rem 7z

rem 7ZIP ENVIRONMENT VARIABLE PATH
set "PATH=%PATH%;C:\Program Files\7-Zip"

rem SET SOURCE, DESTINATION AND REVISION AMOUNT VARIABLES
set "source=C:\AVImark"
set "destination=C:\AVImarkBackup"
set "revisions=7"
set "datestamp=%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%"

rem Change Directory to the source data folder
pushd "%source%" && (
    rem Run the command to compress the directory, gather the date stamp and insert compressed file into destination folder
    7z a -r -v4g "%destination%\%datestamp% Backup.7z"
    popd
)

rem CHECK FOR REVISIONS
pushd "%destination%" && (
    rem Option 1
    rem Delete by last modified filedate
    forfiles /d -7 /m "*Backup.7z.*" /c "cmd /c echo del @path"

    rem Or use:

    rem Option 2
    rem Delete by logged date. Requires datestamp yyyy-MM-dd for correct sorting
    if exist Backup.log (
        findstr /c:"%datestamp%" Backup.log || >> Backup.log echo %datestamp%
    ) else (
        > Backup.log echo %datestamp%
    )

    for /f "skip=%revisions% delims=" %%A in ('type Backup.log ^| sort /r') do (
        echo del "%%~A Backup.7z.*"
    )

    popd
)

Изменена метка даты на yyyy-MM-dd вместо dd.MM.yyyy. Бывшая метка даты лучше для сортировки. Если вы хотите, чтобы дата не зависела от локали, найдите wmic os get localdatetime команд на этом сайте.

Использование pushd и popd вместо cd. && используется для запуска следующей команды, если последняя команда была успешной. || - выполнить следующую команду, если последняя команда не удалась.

Для удаления ревизий предлагается 2 варианта:

  1. 1-ым является использование forfiles. В настоящее время, как установлено, будут удалены старые версии чем 7 дней с текущей даты. Это может быть подходящим, если не было резервных копий сделано за 7 дней, что может привести к отсутствию резервных копий.

  2. Вторым является использование Backup.log. Дата добавляется в файл журнала, а затем for цикл читает файл журнала с type и sort меняет вид, чтобы сделать самый старый 1-й и последний прошлой. skip избегает обработки 1-го 7 ревизий. Остальные будут использованы для удаления архивы по шаблону файла.

Удалить код опции не хотел.

del команды отображаются для тестирования. Если доволен, удалите эхо, чтобы удаление действительно заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...