powershell - 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
}
推荐阅读
- c++ - 并非本地主机上所有 udp 发送的数据包都显示在 wireshark 上
- getstream-io - 有没有办法在仪表板或 CLI 中查看/管理所有用户、频道?
- machine-learning - 制作 Nauto 手势检测模型
- java - (Javax swing) repaint() 有时不调用paintComponent()
- php - 如何显示文件夹中的所有图像?
- spring-boot - 无法在 docker compose 中构建和运行应用程序。在根项目“gradle”中找不到任务“bootRun”
- angularjs - 在 ng-repeat 中使用变量并将其传递给控制器
- python - 如何在同一个 chrome 实例上循环搜索?
- python - 如何打印偶数字符串并返回索引?
- java - JavaFX 将 BarChart xAxis/width 设置为大小