繁体   English   中英

使用 Powershell 归档具有特定日期的文件

[英]Archive Files with Specific Date with Powershell

我有以下任务......我想使用具有特定创建/编辑日期的 Powershell 脚本存档文件。 因此,我开始使用以下语句获取这些文件的列表:

Get-ChildItem -Path C:\Data\... -Recurse | Where-Object { $_.LastWriteTime.Date -gt '2021.01.01' }

这似乎工作正常,因为我只列出了所需的文件。 如果我将语句扩展为

Get-ChildItem -Path C:\DATA\... -Recurse | Where-Object { $_.LastWriteTime.Date -gt '2021.01.01' } | Compress-Archive -DestinationPath C:\Data\Delta\Archive.zip

存档的文件在 ZIP 文件中加倍。 一个是正​​确的文件集,然后所有文件(以及那些早于指定日期的文件)都会再次添加到存档中。

有人可以告诉我我错过了什么吗?

提前致谢

嘉年华

亚历克斯

如果您想要具有该确切修改日期的文件,则需要将 Where-Object 子句中的运算符-gt更改为-eq

此外,您应该始终将 DateTime 与另一个 DateTime 对象进行比较,以确保您现在输入的字符串('2021.01.01') 正确转换为 DateTime 对象(这在很大程度上取决于您的系统文化......)

然后,由于您要在路径C:\\DATA中查找文件,并且还在同一根路径中创建了 zip 文件,因此建议在Get-ChildItem周围放置方括号,以便在对文件执行进一步操作之前完成文件收集文件。 如果不这样做,新的 zip 文件也将被枚举。

尝试

$refDate = (Get-Date -Year 2021 -Month 1 -Day 1).Date
# filter the files that have an specific last modified date
(Get-ChildItem -Path 'C:\DATA\...' -File -Recurse | Where-Object { $_.LastWriteTime.Date -eq $refDate }) | 
Compress-Archive -DestinationPath 'C:\Data\Delta\Archive.zip'

或者

$refDate = (Get-Date -Year 2021 -Month 1 -Day 1).Date
# filter the files that have an specific last modified date
$files = Get-ChildItem -Path 'C:\DATA\...' -File -Recurse | Where-Object { $_.LastWriteTime.Date -eq $refDate }
$files | Compress-Archive -DestinationPath 'C:\Data\Delta\Archive.zip'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM