使用 Windows 计划任务将文件压缩为每日/每周/每月档案

使用 Windows 计划任务将文件压缩为每日/每周/每月档案

对于需要归档的 EDI 文件,我想使用压缩实用程序(如 7Zip),它根据文件类型收集和压缩文件文件日期。例如,需要更新每周存档(第 1 周为 coming-2009-01.7z),其中包含文件日期在本周的所有传入文件。

是否有一个命令行实用程序可用于使用必要的参数调用压缩工具,或者其他简单的方法来实现这样的存档策略?

答案1

我不知道有哪个实用程序可以直接提供此功能,但构建一个脚本(使用 powershell、perl、python ..)来识别符合条件的文件是相当简单的,将完全限定名称(例如 d:\incoming\something\filename.ext )放入一个平面文本文件中,每行一个文件名,然后让您的压缩实用程序从该列表文件创建一个存档,例如

7z -a output.zip @filelist.txt

如果将整个内容包装在脚本中,那么分配您指定的档案名称类型就非常容易了。

添加了 Powershell 示例。

$archiveroot="c:\temp"
$oldest = (get-date) - (new-timespan -day 31)
$archivename="Incoming-" + $oldest.year + "-" +$oldest.month+".7z"
$filelist= get-childitem $archiveroot -recurse | where-object {$_.lastwritetime -gt $oldest}
$filelist | format-table -hideTableHeaders FullName | out-file -encoding utf8 -filepath lastmonthsfiles.txt
& .\7z.exe a $archivename `@lastmonthsfiles.txt

它不完全是一行程序,您需要将其正确指向 7-Zip exe,添加一些参数处理,一些日志记录\错误处理,它应该清理工作文件,但它是一个指向正确方向的指针。

答案2

我使用由不同来源组成的脚本。

rd /s /q f:\todays

rem This makes a backup of the previous days data, 

    robocopy u:\  F:\todays\u-Drive /mir /w:0 /r:0 /e /s /np /fft /maxage:1 /maxlad:1 /xf *.pst

rem zips up the backup folder

    7z a -tzip todays "todays\*" -r


rem renames the zip file to a date stamp

    Set CURRDATE=%TEMP%\CURRDATE.TMP
    Set CURRTIME=%TEMP%\CURRTIME.TMP
    DATE /T > %CURRDATE%
    TIME /T > %CURRTIME%
    Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
    For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%l%%k%%j
    Set PARSEARG="eol=; tokens=1,2,3* delims=:, "
    For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMM=%%i%%j%%k


    RENAME todays.zip backup_%YYYYMMDD%%HHMM%.zip


    move /y F:\*.zip F:\backup\Zips

我使用 7zip 和 robocopy。将两个 exe 文件放在与脚本相同的目录中。

怎么运行的:

它会删除前几天的“todays”文件夹,因为我们想要一个干净的记录,然后 robocopy 会扫描数据文件夹 (U:),并将其设置为仅复制过去 24 小时内创建或修改的文件。它会将其复制到另一个驱动器/文件夹 (F:\todays)。这会为您提供增量文件。

然后 7zip 压缩该文件夹

下一个脚本计算出年、月、日、时、分、秒,然后重命名 7zip 下制作的 zip 文件。

最后,脚本将重命名的 zip 移动到另一个名为“zips”的文件夹中。

多年来,我一直使用这个脚本来为我提供可以从资源管理器中快速打开的日常 zip 文件。

相关内容