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

如何在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.zip
  • FolderName\:要压缩的目标文件夹路径

解压缩也很简单,直接运行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:00:49