2016-07-29 5 views
1

Я пытаюсь ZIP-папка с 800 картинками, каждый ZIP-файл, содержащий только 10 или меньше фотографий, поэтому я должен получить 80 ZIP-файлов. Если кто-то знает код файла BAT, чтобы сделать это, я был бы очень благодарен. Я также НЕ хочу удалять файлы после того, как они были заархивированы.Код для автоматизации инкрементного сжатия ZIP?

Я знаю, что я, вероятно, буду использовать 7-Zip, но я просто не могу найти ответ для этого в любом месте. Благодаря!

+0

7zip и, возможно, большинство сжимающих инструментов, можно разделить по размеру не количество файлов https://sevenzip.osdn.jp/chm/cmdline/switches/volume.htm, и вам понадобится каждый отдельный почтовый ящик для извлечения одного файла. Вы должны указать цель или ожидаемый результат. – 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++ 
} 

Это позволит создать список всех файлов, которые должны быть заархивированы. Затем запечатайте их пакетами из 10 файлов, используя 7z.exe (7-zip).

Примечание: Для переменных $ZipFolder & $NewZipsFolder не ставят обратную косую черту на пути к папкам (\).

+0

Это сработало! Большое спасибо! Вы просто спасли мне часы работы! Я изменил .7z на .zip за то, что мне нужно, но сделал то, что он должен был делать! –

0

Вы можете хранить список файлов в Powershell, используя что-то вдоль линий

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

Затем установите псевдоним для 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 и должен добавлять файлы в архив, создавая при необходимости.