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

如何使用PowerShell递归压缩子目录backup内文件打包后删除原文件夹

PowerShell 实现方案

原脚本问题原因

原脚本存在三个核心问题导致不符合预期:

  • 压缩包嵌套外层backup文件夹:直接将backup目录本身作为压缩源传给Compress-Archive时,该cmdlet会将传入的源根对象保留在压缩包内,形成多余的目录层级
  • 压缩包存储路径错误:未基于backup目录的父目录拼接绝对输出路径,PowerShell默认将相对路径解析到当前执行脚本的工作根目录,导致压缩包位置错误
  • 删除逻辑失效:原脚本中Remove-Item的调用逻辑错误,既没有正确传入要删除的原backup目录路径,还附带了无效的template参数,无法完成删除原目录的操作

可直接运行的正确脚本

# 递归遍历当前目录下所有名为backup的文件夹
Get-ChildItem -Path '.' -Recurse -Directory -Filter 'backup' | ForEach-Object {
    # 拼接压缩包的正确存储路径:backup文件夹的同级父目录下,命名为backup.zip
    $zipSavePath = Join-Path $_.Parent.FullName 'backup.zip'
    # 获取backup文件夹内部的所有文件、子文件夹(包含隐藏项)
    $innerItems = Get-ChildItem -Path $_.FullName -Force
    # 执行压缩:直接打包内部内容,无外层backup目录,已存在同名zip时强制覆盖
    Compress-Archive -Path $innerItems.FullName -DestinationPath $zipSavePath -Force
    # 压缩完成后递归删除原backup文件夹
    Remove-Item -Path $_.FullName -Recurse -Force
}

执行效果

脚本运行后会完全匹配预期目录结构:

  • 所有backup文件夹内的内容直接打包为同级目录下的backup.zip
  • 压缩包打开后直接显示folder0、file1、file2,无外层backup目录
  • 原backup文件夹在压缩完成后自动清理

注:如果需要兼容空backup文件夹的场景,可以在压缩逻辑前加判断:如果$innerItems为空,可先创建一个空占位文件再压缩,避免Compress-Archive因源为空报错。

内容的提问来源于stack exchange,提问作者ashspenzr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:45:58