2016-07-29 38 views
1

Ich versuche, einen Ordner mit 800 Bildern zu komprimieren, wobei jede ZIP-Datei nur 10 oder weniger Bilder enthält, also sollte ich 80 ZIP-Dateien erhalten. Wenn jemand den BAT-Dateicode dafür kennt, wäre ich sehr dankbar. Ich möchte die Dateien auch NICHT löschen, nachdem sie gezippt wurden.Code zur Automatisierung der inkrementierten ZIP-Komprimierung?

Ich weiß, dass ich wahrscheinlich 7-Zip verwenden werde, aber ich kann einfach nirgendwo eine Antwort finden. Vielen Dank!

+0

7zip und wahrscheinlich die meisten Komprimierungstools, können nur durch die Größe nicht teilen Anzahl der Dateien teilen https://sevenzip.osdn.jp/chm/cmdline/switches/volume.htm und Sie müssen jede einzelne Zip, um einzelne Datei zu extrahieren. Sie sollten den Zweck angeben oder das Ergebnis erwarten – Deptor

Antwort

1

Versuchen Sie Folgendes 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++ 
} 

Dies wird eine Liste aller Dateien erstellen, die gezippt müssen. Dann zippen Sie sie in Stapeln von 10 Dateien mit 7z.exe (7-Zip).

Hinweis: Für die Variablen $ZipFolder & $NewZipsFolder platziere einen Backslash nicht auf den Ordnerpfaden (\).

+0

Das hat funktioniert! Vielen Dank! Du hast mir gerade Stunden Arbeit gerettet! Ich habe die .7z in .zip für das geändert, was ich brauchte, aber es hat getan, was es tun sollte! –

0

Sie könnten eine Liste der Dateien in Powershell speichern etwas entlang der Linien von

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

mit Set dann einen Alias ​​für 7zip

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

Erstellen Sie dann eine Schleife mit einem Zähler entlang der Linien von

$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 

Ich habe in VB für eine kurze Weile geschrieben und so entschuldigt, wenn die Powershell Syntax ist ein bisschen aus. Im Wesentlichen sollte das 10 Dateien zu "C: \ MyPhotoArchive1", 10 Dateien zu "C: \ MyPhotoArchive2" hinzufügen. Ich habe keine Dateien zu einem Archiv mit 7zip für eine lange Zeit hinzugefügt, aber ich denke, der Anruf verwendet nur eine a und sollte Dateien zu einem Archiv hinzufügen, eines bei Bedarf erstellen.