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

如何用PowerShell将文件打包为多个独立的50MB上限ZIP文件?

解决方案

下面是一段PowerShell脚本,可递归遍历主文件夹下所有子文件夹的PDF文件,将它们分组打包为多个独立的、单文件大小不超过50MB的ZIP包:

# 配置参数
$sourceFolder = "你的主文件夹路径"
$outputPath = "输出ZIP的文件夹路径"
$maxSizeMB = 48  # 预留2MB余量,避免压缩后ZIP体积接近或超过50MB限制
$currentZipIndex = 1
$currentSize = 0
$currentFiles = @()

# 创建输出文件夹(不存在则自动生成)
if (-not (Test-Path $outputPath)) {
    New-Item -ItemType Directory -Path $outputPath | Out-Null
}

# 递归获取所有PDF文件
$pdfFiles = Get-ChildItem -Path $sourceFolder -Filter *.pdf -Recurse -File

foreach ($file in $pdfFiles) {
    $fileSizeMB = $file.Length / 1MB

    # 若当前文件加入后会超出体积上限,先打包当前组文件
    if ($currentSize + $fileSizeMB -gt $maxSizeMB) {
        $zipName = Join-Path $outputPath "Result$currentZipIndex.zip"
        Compress-Archive -Path $currentFiles.FullName -DestinationPath $zipName -Force
        # 重置分组状态
        $currentZipIndex++
        $currentSize = 0
        $currentFiles = @()
    }

    # 将当前文件加入分组
    $currentFiles += $file
    $currentSize += $fileSizeMB
}

# 处理最后一组剩余的未打包文件
if ($currentFiles.Count -gt 0) {
    $zipName = Join-Path $outputPath "Result$currentZipIndex.zip"
    Compress-Archive -Path $currentFiles.FullName -DestinationPath $zipName -Force
}

脚本说明

  • 参数配置:修改$sourceFolder为你的主文件夹路径,$outputPath为ZIP文件的输出目录;设置$maxSizeMB为48MB是因为PDF压缩率较低,预留余量可有效避免压缩后的ZIP超过50MB限制。
  • 递归遍历:通过Get-ChildItem -Recurse自动抓取所有子文件夹下的PDF文件。
  • 分组打包逻辑:逐个累加文件体积,当加入下一个文件会超出设定上限时,立即将当前分组的文件打包为独立ZIP,随后重置分组开始新一轮收集。
  • 收尾处理:遍历结束后,将剩余未打包的文件单独打包为最后一个ZIP。

7-Zip替代方案

若偏好使用7-Zip(压缩率更高),可将脚本中的打包逻辑替换为以下代码:

# 替换原打包部分的代码
$zipName = Join-Path $outputPath "Result$currentZipIndex.zip"
$filePaths = $currentFiles.FullName -join " "
Start-Process -FilePath "7za.exe" -ArgumentList "a -tzip `"$zipName`" $filePaths" -Wait -NoNewWindow

注意:需确保7za.exe路径已加入系统环境变量,或在脚本中使用完整路径(例如"C:\Program Files\7-Zip\7za.exe")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:55:37