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

PowerShell调用7-Zip打包选中目录 保留相对结构排除子目录

PowerShell调用7z仅打包目标文件夹一级文件、保留目录结构实现方案

原有命令直接将文件夹全路径传给7z时,7z默认开启递归遍历,会把文件夹下所有层级的子目录内容全部打包,不符合需求。以下两种通用方案都可以实现预期效果,不限制文件扩展名,压缩包内保留目标文件夹名\直接文件的结构:

方案一:使用7z内置参数关闭递归(代码最简洁)

7z压缩命令自带-r-参数用于完全关闭目录递归,逐次向7z传入目标文件夹下的通配符路径即可,不需要额外做文件筛选:

# 先筛选出名称匹配规则的目标文件夹
$targetDirs = Get-ChildItem "C:\users\user\appdata\local\folder" -Directory | Where-Object { $_.Name -like "*folder*" }

foreach ($dir in $targetDirs) {
    # 传入文件夹下所有直接内容的通配符,-r-关闭递归,自动保留一级目录结构
    & "C:\program files\7-zip\7z.exe" a "D:\TestBackup\Zipfile.7z" (Join-Path $dir.FullName "*") -r-
}

参数说明:

  • -r-:强制关闭7z的递归遍历逻辑,仅处理传入路径下直接存放在根层级的文件,不会进入任何子目录
  • 传入文件夹路径\*格式的路径时,7z会自动将父文件夹名作为压缩包内的一级目录,正好匹配预期结构
  • 通配符*匹配所有类型文件,不需要单独指定扩展名,通用性强

方案二:PowerShell预筛选一级文件(逻辑更灵活)

如果需要额外增加文件筛选规则(比如按修改时间、文件大小过滤),可以先用PowerShell精准筛选出所有需要打包的一级文件,再传入7z压缩,通过切换工作目录保证压缩包内路径结构正确:

# 筛选匹配规则的文件夹下,所有直接存放在根目录的文件,-Depth 1限制仅遍历1层,-File参数仅返回文件对象
$packFiles = Get-ChildItem -Path "C:\users\user\appdata\local\folder\*folder*" -File -Depth 1

# 切换到根目录作为工作路径,避免压缩包内出现完整C盘绝对路径
Push-Location "C:\users\user\appdata\local\folder"
& "C:\program files\7-zip\7z.exe" a "D:\TestBackup\Zipfile.7z" $packFiles.FullName
# 还原原工作目录
Pop-Location

注意:原有筛选命令里的匹配规则"*folder*缺少闭合双引号,运行时会触发PowerShell语法错误,使用时需要补全为"*folder*"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:48:22