Utwórz wiele plików zip

-1

Mam kilka plików, które chciałbym rozpakować, potrzebuję skryptu do rekurencyjnego uruchamiania w katalogu i znajdowania wszystkich plików z testem nazw * .txt jako przykładu.

To jest łatwa część, więc użyłem 7zip, aby zrobić to w PowerShell.

Teraz potrzebuję jakoś ograniczyć liczbę plików na zip do 15 plików.

Więc niektóre ograniczenia, to musi być w formacie .zip i nie może to być łączony zip, myślę o tym, aby uruchomić PowerShell 15 na raz, a następnie po prostu tworzyć zipy, tzn. Uruchomić pierwszą 15 jako test.zip następnie następne 15 jako test1.zip, a następnie 15 jako test2.zip itd.

Poniżej znajduje się kod, którego aktualnie używam.

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 
Jakes
źródło

Odpowiedzi:

0

Oto, co wymyśliłem - nie obiecuję ani nie sugeruję, że jest to jedyna / najlepsza metoda. Mam nadzieję, że w ten sposób dotrzesz do miejsca, w którym chcesz być ... :)

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++
    }
}
Ƭᴇcʜιᴇ007
źródło
Wszystko, czego mi brakowało, polegało na tym, żeby powiedzieć, że ma powtarzać się podczas pobierania elementów potomnych :) Wielkie dzięki!
Jakes
Hej Techie007, czy jest tak, że może to być ograniczone przez całkowity rozmiar, teraz zostałem rzucony na krzywą piłkę, gdzie mój rozmiar pliku zip musi być 4 GB, mogę go pobrać i dać mi całkowitą ale pętla przez 4 GB na raz okazuje się bardzo skomplikowana dla mojego prostego mózgu :)
Jakes
To, o co pytasz, jest skomplikowane, więc rozwiązanie będzie równie dobrze. Musisz zebrać wszystkie pliki i ich rozmiary, a następnie miksować pliki różnych rozmiarów w grupy, które będą kompresować do mniej niż 4 GB każdy. Nie jest to proste zadanie i poza zakresem pojedynczego pytania SU i NAPRAWDĘ poza zakresem komentarzy. ;)
Ƭᴇcʜιᴇ007
Myślałem, że może to być trochę bardziej skomplikowane, jeszcze raz dziękuję za całą pomoc. Mam rozmiary, więc skryptuję je na podstawie grup i dostosowuję liczbę PST na zip. Dzięki jeszcze raz
Jakes
Cześć, wyciągam włosy tutaj, natrafiłem na problem, że jeśli nazwa pliku jest taka sama w innym folderze, zachowuje tylko jeden plik. wszelkie pomysły byłyby bardzo mile widziane
Jakes