如何在PowerShell或命令提示符实现Linux多份Zip归档等效操作?
在PowerShell/命令提示符中实现分卷Zip压缩的等效方法
当然有办法实现!不过Windows原生的PowerShell和CMD在分卷Zip压缩这块,不像Linux的zip -r -s 64那么直接,下面给你两种最实用的方案:
方案一:使用7-Zip(推荐,好用还跨平台)
不管是PowerShell还是CMD,只要你装了7-Zip,就能轻松搞定分卷压缩。7-Zip的命令行工具是7z.exe,默认安装路径一般是C:\Program Files\7-Zip\7z.exe,如果已经把它加到系统PATH里,直接就能调用。
执行命令(PowerShell/CMD通用):
7z a -tzip -v64m archive.zip FolderName\
参数解释:
a:表示往归档里添加文件-tzip:指定生成的归档格式为Zip-v64m:设置每个分卷的大小为64MB(m代表MB,也可以用k表示KB、g表示GB)archive.zip:主归档文件名,生成的分卷会自动命名为archive.z01、archive.z02……最后一个是archive.zipFolderName\:要压缩的目标文件夹路径
解压缩也很简单,直接运行7z x archive.zip,7-Zip会自动识别所有分卷并合并解压。
方案二:PowerShell原生.NET实现(无需额外工具)
如果不想装第三方工具,可以用PowerShell调用.NET的System.IO.Compression.ZipArchive类自己写脚本实现,不过这是基础版,对超大文件的支持不如7-Zip:
示例脚本:
function Compress-ZipSplit { param( [Parameter(Mandatory=$true)] [string]$SourcePath, [Parameter(Mandatory=$true)] [string]$OutputBaseName, [int]$VolumeSizeMB = 64 ) $volumeSize = $VolumeSizeMB * 1024 * 1024 $fileIndex = 1 $currentVolumeSize = 0 $zipArchive = $null Get-ChildItem -Path $SourcePath -Recurse | ForEach-Object { if (-not $zipArchive -or $currentVolumeSize + $_.Length -gt $volumeSize) { if ($zipArchive) { $zipArchive.Dispose() } $volumeName = if ($fileIndex -eq 1) { "$OutputBaseName.zip" } else { "$OutputBaseName.z$($fileIndex.ToString('00'))" } $zipStream = New-Object System.IO.FileStream($volumeName, [System.IO.FileMode]::Create) $zipArchive = New-Object System.IO.Compression.ZipArchive($zipStream, [System.IO.Compression.ZipArchiveMode]::Create) $currentVolumeSize = 0 $fileIndex++ } $entryPath = $_.FullName.Substring($SourcePath.Length + 1) $entry = $zipArchive.CreateEntry($entryPath, [System.IO.Compression.CompressionLevel]::Optimal) $entryStream = $entry.Open() $fileStream = $_.OpenRead() $fileStream.CopyTo($entryStream) $currentVolumeSize += $_.Length $fileStream.Dispose() $entryStream.Dispose() } if ($zipArchive) { $zipArchive.Dispose() } } # 调用示例:把FolderName压缩成每个64MB的分卷Zip包 Compress-ZipSplit -SourcePath "FolderName\" -OutputBaseName "archive" -VolumeSizeMB 64
注意:这个脚本没处理单个文件大于分卷大小的情况,如果你的文件夹里有超大文件,优先用7-Zip更靠谱。
关于纯CMD的说明
CMD本身没有内置的分卷Zip压缩工具,所以要么用上面的7-Zip命令,要么切换到PowerShell来操作会更方便。
内容的提问来源于stack exchange,提问作者nano
相关产品推荐
相关产品推荐

