创建多个 zip 文件

创建多个 zip 文件

我有一堆想要压缩的文件,我需要一个脚本来递归地遍历目录并查找所有名为 test*.txt 的文件作为示例。

这是最简单的部分,所以我使用 7zip 在 powershell 中执行此操作。

我现在需要的是以某种方式将每个 zip 的文件数量限制为 15 个文件。

因此有一些限制,这需要采用 .zip 格式并且不能是跨区 zip,我的想法可能是让 powershell 一次运行 15 个,然后按顺序创建 zip,即首先将 15 个作为 test.zip 运行,然后将接下来的 15 个作为 test1.zip 运行,然后将接下来的 15 个作为 test2.zip 运行等等。

以下是我目前正在使用的代码。

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {throw "$env:ProgramFiles\7-Zip\7z.exe needed"} 
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe" 
$filename="test"
sz a -tzip -mx5 -mmt=on $Target\"$filename.zip" $Source\$filename*.txt -r 

答案1

这就是我想到的——我不保证或建议这是唯一/最好的方法。希望它能让你达到你想要的目标……:)

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe")) {
    throw "$env:ProgramFiles\7-Zip\7z.exe needed"
} 

set-alias sz "$env:ProgramFiles\7-Zip\7z.exe" 

$filename="test"

# Get the list of files to zip  
$fileList = gci $Source\$filename*.txt

# Initalize a counter to keep track of which Zip we're working on.
$zipCounter = 1

# Loop through the file list, one at a time.
for ($i = 0; $i -lt $fileList.Length; $i++) {

    # Use the current entry in the File List array to add the file to the zip.
    sz a -tzip -mx5 -mmt=on "$target\$filename$zipCounter.zip" $fileList[$i] -r

    # Use modulus - if it returns no remainder, then the current loop is a multiple of 15. 
    # (+1 and putting it last in the loop make it consider the zip name for the NEXT loop.
    # I did this because "0 % 15 = 0"). 
    if (($i + 1) % 15 -eq 0) {
        # Multiple of 15? Time to switch to the next zip file.
        $zipCounter++
    }
}

相关内容