如何通过PowerShell压缩60天以上的指定文件夹?
筛选60天及以上文件并压缩的PowerShell实现
核心思路
先计算60天前的日期作为筛选阈值,再批量获取符合条件的文件,最后根据需求选择统一压缩到单个归档包或单独压缩每个文件。
方案一:批量压缩到单个Zip包(常用场景)
# 计算60天前的日期,作为文件修改时间的筛选阈值 $cutoffDate = (Get-Date).AddDays(-60) # 获取目标路径下,修改时间在60天及以前的所有文件 # 若不需要递归遍历子文件夹,去掉 `-Recurse` 参数即可 $targetFiles = Get-ChildItem -Path '你的目标文件夹路径' -File -Recurse | Where-Object {$_.LastWriteTime -le $cutoffDate} # 仅当存在符合条件的文件时执行压缩 if ($targetFiles.Count -gt 0) { # 将所有符合条件的文件压缩到指定Zip包 # `-Force` 会覆盖已存在的同名Zip包;若需追加文件,替换为 `-Update` Compress-Archive -Path $targetFiles.FullName -DestinationPath '你的备份Zip文件路径' -CompressionLevel Fastest -Force Write-Host "已完成压缩:共处理 $($targetFiles.Count) 个文件" } else { Write-Host "未找到60天及以上的文件" }
方案二:每个符合条件的文件单独压缩
如果需要将每个旧文件单独打包成Zip(和你参考的代码逻辑一致),可以用循环实现:
$cutoffDate = (Get-Date).AddDays(-60) $targetFiles = Get-ChildItem -Path '你的目标文件夹路径' -File -Recurse | Where-Object {$_.LastWriteTime -le $cutoffDate} foreach ($file in $targetFiles) { # 每个文件单独生成同名Zip包,存放在原文件所在目录 Compress-Archive -Path $file.FullName -DestinationPath "$($file.FullName).zip" -CompressionLevel Fastest -Force }
关键参数说明
-File:仅筛选文件(排除文件夹),避免误压缩目录-Recurse:递归遍历目标路径下的所有子文件夹-CompressionLevel:可选值Fastest(最快速度)、Optimal(最优压缩率)、NoCompression(无压缩)-Force:覆盖已存在的目标Zip包;-Update:向已存在的Zip包中追加新文件
内容的提问来源于stack exchange,提问作者Court P
相关产品推荐
相关产品推荐

