PowerShell解压Zip如何丢弃目录结构?有无unzip -j等效方案?
PowerShell Expand-Archive 是否支持 unzip -j 等效参数?
PowerShell内置的Expand-Archive不具备等效于unzip -j的功能参数——unzip -j的作用是忽略压缩包内的目录结构,直接将所有文件提取到指定目标目录,而Expand-Archive默认会完整保留原压缩包的目录层级。
Windows平台的替代方案
1. 使用7-Zip命令行工具
如果已安装7-Zip(默认路径通常为C:\Program Files\7-Zip\7z.exe),可以用e参数实现忽略目录结构的提取:
& "C:\Program Files\7-Zip\7z.exe" e "thing.zip" -o"somepath" -y
e:提取文件并忽略目录结构-o"somepath":指定目标路径-y:自动确认覆盖已存在文件
2. 用PowerShell结合.NET类手动实现
通过System.IO.Compression.ZipFile类编写脚本,遍历压缩包内文件并直接提取到目标目录:
$zipFilePath = "thing.zip" $destinationPath = "somepath" # 创建目标目录(如果不存在) if (-not (Test-Path -Path $destinationPath)) { New-Item -ItemType Directory -Path $destinationPath | Out-Null } # 加载.NET压缩类 Add-Type -AssemblyName System.IO.Compression.FileSystem # 打开压缩包并遍历文件 $zipArchive = [System.IO.Compression.ZipFile]::OpenRead($zipFilePath) foreach ($entry in $zipArchive.Entries) { # 跳过空的目录项 if ([string]::IsNullOrEmpty($entry.Name)) { continue } # 拼接目标文件路径 $targetFile = Join-Path -Path $destinationPath -ChildPath $entry.Name # 提取文件并覆盖已存在的文件 [System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $targetFile, $true) } # 释放资源 $zipArchive.Dispose()
3. 使用Windows自带的tar命令
Windows 10及以上版本默认自带tar工具,可通过--transform参数修改文件路径,实现忽略目录结构提取:
tar xf "thing.zip" -C "somepath" --transform 's,.*/,,x' --overwrite
--transform 's,.*/,,x':用正则替换去掉文件路径中的所有目录部分,只保留文件名-C "somepath":指定提取的目标目录--overwrite:覆盖已存在的文件
内容的提问来源于stack exchange,提问作者SRSR333
相关产品推荐
相关产品推荐

