2016-07-29 80 views
1

我想ZIP文件夾中的800張圖片,每個ZIP文件只包含10個或更少的圖片,所以我應該結束了80個ZIP文件。如果有人知道BAT文件的代碼來做到這一點,我會非常感激。我也不想在壓縮後刪除文件。用於自動增加ZIP壓縮的代碼?

我知道我可能會使用7-Zip,但我似乎無法在任何地方找到答案。謝謝!

+0

7zip和可能最壓縮的工具,只能按文件大小不能分割https://sevenzip.osdn.jp/chm/cmdline/switches/volume.htm,你需要每一個zip文件來提取單個文件。你應該指定目的或期待結果 – Deptor

回答

1

請嘗試以下PowerShell

# Setup variables (Change) 
$ZipFolder = "T:\YourFolder\WithFiles\ToZip" 
$7Zip = "C:\Program Files\7-Zip\7z.exe" 
$NewZipsFolder = "T:\FolderToPut\AllOfThe\ZipsIn" 

# Script Variables 
$pendingFiles = @() 
$fileNumber = 1 

# Get a list of all the files to be zipped 
Get-ChildItem $ZipFolder | sort $_.FullName | ForEach-Object { $pendingFiles += $_.FullName } 

# While there are files still to zip 
While($pendingFiles){ 

    # Select first 10 files to zip and zip them 
    $ToZip = $pendingFiles | Select -First 10 
    & $7Zip "a" "$NewZipsFolder\File-$fileNumber.7z" $ToZip 

    # Remove first 10 zipped files from pending files array 
    $pendingFiles = $pendingFiles | Where-Object { $ToZip -notcontains $_ } 
    $fileNumber++ 
} 

這將創建一個需要被拉鍊中的所有文件的列表。然後使用7z.exe(7-zip)將它們分批壓縮成10個文件。

注意:對於變量$ZipFolder & $NewZipsFolder不要把尾部的反斜槓的文件夾路徑(\)。

+0

這工作!非常感謝!你剛剛救了我幾個小時的工作!我確實將.7z換成了我所需要的.zip,但它做了它應該做的事! –

0

你可以使用的東西沿着

$fileList = Get-Item -Path "C:\MyPhotosDir\*" 

行文件的列表存儲在PowerShell中後,再設置7zip的別名

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

然後創建沿線的一個計數器循環

$i = 1 
foreach $file in $fileList 
    #Build foder name name 
    $folderDir = "C:\MyPhotoArchive$($i - ($i % 10) + 1).7z" 
    sz a -t7z $folderDir $file.filename 
end for 

我一直在VB寫作一段時間,所以道歉,如果Powershell語法有點偏離。本質上應該添加10個文件到「C:\ MyPhotoArchive1」,10個文件添加到「C:\ MyPhotoArchive2」。我很長一段時間沒有使用7zip將文件添加到存檔中,但我認爲該調用僅使用a,並應將文件添加到存檔,並在需要時創建一個。