限制 7-Zip 存档拆分以设置备份的修订数
Limit 7-Zip archive splitting to set number of revisions for backup
我正在尝试创建一个批处理脚本以获取 Windows 中的一个目录,并使用批处理脚本使用 7-zip 压缩它,但将每个压缩部分的最大文件大小限制为每个最大 4GB ,将修订压缩集的总数限制为 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-Zip\
REM echo %PATH%
REM 7z
REM 7ZIP ENVIRONMENT VARIABLE PATH
set PATH=%PATH%;C:\Program Files-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 个修订版。
实际结果
最旧的作业没有进行修订检查和清理,它不断添加更多集。
@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-Zip\
rem echo %PATH%
rem 7z
rem 7ZIP ENVIRONMENT VARIABLE PATH
set "PATH=%PATH%;C:\Program Files-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 个选项用于删除修订:
第一种是forfiles
的使用。
目前已设置,它将删除较早的修订
从当前日期算起超过 7 天。
这可能是合适的,除非没有备份
完成 7 天,这可能导致没有备份。
第二种是Backup.log
的使用。
日期附加到日志文件,然后
for
循环读取带有 type
和 sort
的日志文件
反转排序以使最旧的第一个和最新的
最后的。 skip
避免处理第一个
7 次修订。其余的将用于删除
按文件模式归档。
删除不需要的选项代码。
del
命令被回显用于测试。如果满意,
删除回声以使删除真正起作用。
我正在尝试创建一个批处理脚本以获取 Windows 中的一个目录,并使用批处理脚本使用 7-zip 压缩它,但将每个压缩部分的最大文件大小限制为每个最大 4GB ,将修订压缩集的总数限制为 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-Zip\
REM echo %PATH%
REM 7z
REM 7ZIP ENVIRONMENT VARIABLE PATH
set PATH=%PATH%;C:\Program Files-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 个修订版。
实际结果
最旧的作业没有进行修订检查和清理,它不断添加更多集。
@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-Zip\
rem echo %PATH%
rem 7z
rem 7ZIP ENVIRONMENT VARIABLE PATH
set "PATH=%PATH%;C:\Program Files-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 个选项用于删除修订:
第一种是
forfiles
的使用。 目前已设置,它将删除较早的修订 从当前日期算起超过 7 天。 这可能是合适的,除非没有备份 完成 7 天,这可能导致没有备份。第二种是
Backup.log
的使用。 日期附加到日志文件,然后for
循环读取带有type
和sort
的日志文件 反转排序以使最旧的第一个和最新的 最后的。skip
避免处理第一个 7 次修订。其余的将用于删除 按文件模式归档。
删除不需要的选项代码。
del
命令被回显用于测试。如果满意,
删除回声以使删除真正起作用。