You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:10:47