Czy można utworzyć archiwum zip za pomocą programu PowerShell?
powershell
zip
archive
Walentin Wasiljew
źródło
źródło
Odpowiedzi:
Jeśli przejdziesz do CodePlex i przejmiesz rozszerzenia społeczności PowerShell , możesz użyć ich polecenia
write-zip
cmdlet.Od
możesz przejść do Galerii PowerShell .
źródło
write-zip [input file/folder] [output file]
Czysta alternatywa PowerShell, która działa z PowerShell 3 i .NET 4.5 (jeśli możesz go użyć):
Po prostu podaj pełną ścieżkę do archiwum zip, które chcesz utworzyć, i pełną ścieżkę do katalogu zawierającego pliki, które chcesz spakować.
źródło
Dodatki
Compress-Archive
i poleceniaExpand-Archive
cmdlet programu PowerShell v5.0 . Strony, do których prowadzą linki, mają pełne przykłady, ale ich istotą jest:źródło
Compress-Archive
opisu: „... maksymalny rozmiar pliku, który można skompresować za pomocą Compress-Archive, wynosi obecnie 2 GB. Jest to ograniczenie podstawowego interfejsu API”. Jeśli jednak użyjeszSystem.IO.Compression.ZipFile
, możesz ominąć to ograniczenie.System.IO.Compression.ZipFile
. Jeśli używana platforma .NET nie ma tego limitu, CmdLet nie powinien przekroczyć tego limitu. Zweryfikowałem w kodzie.-OutputPath
parametru.Natywny sposób z najnowszą platformą .NET 4.5, ale całkowicie pozbawiony funkcji:
Kreacja:
Ekstrakcja:
Jak wspomniano, całkowicie pozbawiony funkcji, więc nie oczekuj flagi zastępowania .
AKTUALIZACJA: Zobacz poniżej innych programistów, którzy rozwijali się w tym przez lata ...
źródło
Zainstaluj 7zip (lub pobierz wersję wiersza polecenia) i użyj tej metody PowerShell:
Możesz to tak nazwać:
źródło
& "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
Lot zmienił się od czasu opublikowania pierwszej odpowiedzi. Oto niektóre z najnowszych przykładów użycia polecenia Compress-Archive .
Polecenie utworzenia nowego pliku archiwum
Draft.zip
poprzez kompresję dwóch plikówDraftdoc.docx
idiagram2.vsd
określone przezPath
parametr. Poziom kompresji określony dla tej operacji to Optymalny.Polecenie, aby utworzyć nowy plik archiwum,
Draft.zip
kompresując dwa plikiDraft doc.docx
iDiagram [2].vsd
określone przezLiteralPath
parametr. Poziom kompresji określony dla tej operacji to Optymalny.Polecenie utworzenia nowego pliku archiwum
Draft.zip
wC:\Archives
folderze. Nowy plik archiwum zawiera każdy plik w folderze C: \ Reference , ponieważ zamiast określonych nazw plików w parametrze Path użyto znaku zastępczego .Command tworzy archiwum z całego folderu,
C:\Reference
PowerShell automatycznie dodaje
.zip
rozszerzenie do nazwy pliku.źródło
Edytuj dwa - Ten kod to brzydka, brzydka kluge z dawnych czasów. Nie chcesz tego.
To kompresuje zawartość
.\in
do.\out.zip
z System.IO.Packaging.ZipPackage zgodnie z przykładem tutajEdycja: zawodny w przypadku większych plików, może> 10 MB, YMMV. Ma to coś wspólnego z dowodami domeny i izolowanym miejscem do przechowywania. Bardziej przyjazne podejście .NET 4.5 działa dobrze z PS v3, ale w moim przypadku potrzebowałem więcej pamięci. Aby korzystać z .NET 4 z PS v2, pliki konfiguracyjne wymagają nieobsługiwanego usprawnienia .
źródło
Podanie poniżej innej opcji. Spowoduje to spakowanie pełnego folderu i zapisanie archiwum do podanej ścieżki o podanej nazwie.
Wymaga platformy .NET 3 lub nowszej
źródło
Oto natywne rozwiązanie dla programu PowerShell v5, wykorzystujące polecenie cmdlet
Compress-Archive
Tworzenie plików Zip za pomocą programu PowerShell .Zobacz także dokumentację Microsoft Docs for Compress-Archive .
Przykład 1:
Przykład 2:
Przykład 3:
źródło
Do kompresji użyłbym biblioteki (7-Zip jest dobry, jak sugeruje Michał ).
Jeśli zainstalujesz 7-Zip , zainstalowany katalog będzie zawierał
7z.exe
aplikację konsolową.Możesz wywołać go bezpośrednio i użyć dowolnej opcji kompresji.
Jeśli chcesz współpracować z biblioteką DLL, powinno to być również możliwe.
7-Zip jest darmowym oprogramowaniem typu open source.
źródło
Co
System.IO.Packaging.ZipPackage
?Wymagałoby .NET 3.0 lub nowszej wersji.
przez Anders Hesselbom
źródło
Dlaczego nikt nie patrzy na dokumentację? Istnieje obsługiwana metoda tworzenia pustego pliku zip i dodawania do niego pojedynczych plików wbudowanych w tę samą bibliotekę .NET 4.5, do której wszyscy się odwołują.
Poniżej znajduje się przykład kodu:
Zachęcam do przejrzenia dokumentacji, jeśli masz jakieś pytania.
źródło
To jest naprawdę niejasne, ale działa. 7za.exe to samodzielna wersja 7zip i jest dostępna z pakietem instalacyjnym.
źródło
Jeśli ktoś musi skompresować pojedynczy plik (a nie folder): http://blogs.msdn.com/b/jerrydixon/archive/2014/08/08/zipping-a-single-file-with-powershell.aspx
źródło
Oto działający kod, który kompresuje wszystkie pliki z folderu źródłowego i tworzy plik zip w folderze docelowym.
źródło
Uwaga:
ZipName: pełna ścieżka do pliku zip, który chcesz utworzyć.
SourceDirectory: pełna ścieżka do katalogu zawierającego pliki, które chcesz spakować.
źródło
Oto nieco ulepszona wersja odpowiedzi sonjza, dodaje opcję zastępowania.
źródło
Powinno to również działać w przypadku kompresji pojedynczego pliku bez użycia folderu tymczasowego i korzystania z natywnego programu .Net 4.5, przekonwertowanego z C # z odpowiedzi StackOverflow . Używa ładniejszej składni pobranej stąd .
Stosowanie:
ZipFiles -zipFilename output.zip -sourceFile input.sql -filename name.inside.zip.sql
Kod:
Za pomocą:
źródło
shell.application
biznesu lub 7-Zip / innych oddzielnych narzędzi. Podoba mi się również taUsing-Object
funkcja, chociaż bez niej wybrałem krótsze, szybkie i brudne podejście.Używam tego fragmentu, aby sprawdzić folder kopii zapasowych bazy danych w poszukiwaniu jeszcze nieskompresowanych plików kopii zapasowych, skompresować je za pomocą 7-Zip, a na koniec usunąć
*.bak
pliki, aby zaoszczędzić trochę miejsca na dysku. Pliki powiadomień są sortowane według długości (od najmniejszej do największej) przed kompresją, aby uniknąć kompresji niektórych plików.Tutaj możesz sprawdzić skrypt PowerShell do tworzenia kopii zapasowych, kompresji i przesyłania tych plików przez FTP .
źródło
Jeśli masz zainstalowany WinRAR:
Znaczenie argumentów: afzip tworzy archiwum zip, df usuwa pliki, ep1 nie tworzy pełnej ścieżki katalogu w archiwum
źródło
Oto kompletny przykład wiersza poleceń do uruchomienia z cmd.exe lub z ssh lub co chcesz!
pozdrowienia
źródło
Ładowanie
[System.IO.IOException]
klasy i korzystanie z jej metod jest ważnym krokiem w celu eliminacji niepożądanych błędów, ponieważ jest to klasa nienatywna dla PowerShell, więc bez niej należy oczekiwać różnych kontekstów błędów.Skontrolowałem mój skrypt do T, ale dostałem wiele dodatkowych czerwonych wyników „plik istnieje” podczas korzystania z
[System.IO.Compression.ZipFile]
klasyTo, co tu robię, polega na wyłapywaniu tych błędów we / wy, takich jak uzyskiwanie dostępu do plików, które już istnieją, przechwytywanie tego błędu i przekierowywanie go do pliku dziennika, który utrzymuję za pomocą większego programu.
źródło
Pełne polecenia wiersza polecenia w systemie Windows do kompresji i wyodrębniania katalogu są następujące:
Do kompresji:
Do wyodrębnienia:
źródło
Podejście jonowe kołysze:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
obsługuje hasła, inne metody kryptograficzne itp.
źródło
Ten skrypt iteruje wszystkie katalogi i zipuje każdy z nich
Get-ChildItem -Attributes d | foreach {write-zip $ .Name "$ ($ .Name) .zip"}
źródło