7zip 将相同日期的文件压缩成一个
7zip compress same dated files into one
我有一个目录,其中包含多个日期不同的 .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-Zipz.exe")) {
throw "$env:ProgramFiles-Zipz.exe needed"
}
set-alias sz "$env:ProgramFiles-Zipz.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}).*', '--')).TotalDays -ge 1
}
我有一个目录,其中包含多个日期不同的 .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-Zipz.exe")) {
throw "$env:ProgramFiles-Zipz.exe needed"
}
set-alias sz "$env:ProgramFiles-Zipz.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}).*', '--')).TotalDays -ge 1
}