7zip将相同日期的文件压缩为一个

问题描述

我有一个目录,其中包含多个不同日期的.log文件。例如,abc_10_28_2020.log,2_abc_10_28_2020.log,abc_10_27_2020.log等。我一直在尝试编写一个压缩PowerShell脚本,以每天将相同日期的日志文件压缩为1个zip文件。我发现使用7zip取得了一些成功,因为我的PowerShell版本不是v5。但是,我的问题是,在尝试压缩当天的日志时,我不知道如何按昨天的日期进行过滤。

到目前为止,我的代码可以将所有abc文件压缩为zip,但我无法按日期进行过滤。

$yesterday = [DateTime]::Today.AddDays(-2).ToString("yyyy_MM_dd")
$path = "C:\Users\Sample\TEST\"
$newname = "test.zip"

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {
throw "$env:ProgramFiles\7-Zip\7z.exe needed"
}

set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"

cd "C:\Users\Sample\TEST\"

sz a -tzip "$newname" $path.Fullname -i!*abc*.log 

因此在上面的示例中,我可以按 abc 进行过滤,但不能按日期进行过滤。我不认为7zip命令允许 $ yesterday ,因为这对我不起作用。

解决方法

我想您的日志文件都具有相同的日期格式?另外,如果要昨天,为什么还要写AddDays(-2)?我想你的意思是AddDays(-1)

仅获取昨天文件的一种非常简单的方法是通配符过滤器:

$filter = (Get-Date).AddDays(-1).ToString("MM_dd_yyyy")
$files = Get-ChildItem $path -Filter "*$filter.log"

或者,如果您只想要1天以上的文件,则可以执行以下操作:

$today = (Get-Date).Date
Get-ChildItem $path | where {
   ($today - [DateTime]($_.Name -replace '.*(\d{2})_(\d{2})_(\d{4}).*','$3-$1-$2')).TotalDays -ge 1
}