Compress-Archive
Tworzy skompresowane archiwum ZIP z określonych plików i katalogów.
Składnia
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Update
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
[-Path] <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Force
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Update
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
-Force
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Compress-Archive
-LiteralPath <String[]>
[-DestinationPath] <String>
[-CompressionLevel <String>]
[-PassThru]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Opis
Polecenie Compress-Archive
cmdlet tworzy skompresowany lub spakowany plik archiwum z co najmniej jednego określonego pliku lub katalogów. Archiwum pakuje wiele plików z opcjonalną kompresją do pojedynczego spakowanego pliku w celu łatwiejszego dystrybucji i magazynu. Plik archiwum można skompresować przy użyciu algorytmu kompresji określonego przez parametr CompressionLevel .
Polecenie Compress-Archive
cmdlet używa interfejsu API System.IO.Compression.ZipArchive do kompresowania plików.
Interfejs API ogranicza maksymalny rozmiar pliku do 2 GB. Interfejs API .NET współpracuje z plikami zgodnymi ze specyfikacją oficjalnego formatu pliku ZIP firmy PKWARE Inc. Aby uzyskać więcej informacji, zobacz System.IO.Compression.ZipArchive.
Uwaga
Polecenie Compress-Archive
cmdlet ignoruje ukryte pliki i foldery podczas tworzenia lub aktualizowania pliku archiwum. Na maszynach innych niż Windows obejmuje to pliki i foldery o nazwie rozpoczynającej się od znaku kropki (.
).
Aby upewnić się, że ukryte pliki i foldery są kompresowane do archiwum, zamiast tego użyj interfejsu API platformy .NET.
W niektórych przykładach użyto fragmentowania, aby zmniejszyć długość wiersza przykładów kodu. Aby uzyskać więcej informacji, zobacz about_Splatting.
Przykłady
Przykład 1. Kompresowanie plików w celu utworzenia pliku archiwum
Ten przykład kompresuje pliki z różnych katalogów i tworzy plik archiwum. Symbol wieloznaczny służy do pobierania wszystkich plików z określonym rozszerzeniem pliku. W pliku archiwum nie ma struktury katalogów, ponieważ ścieżka określa tylko nazwy plików.
$compress = @{
Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress
Parametr Path akceptuje określone nazwy plików i nazwy plików z symbolami wieloznacznymi, *.vsd
. Ścieżka używa listy rozdzielanej przecinkami do pobierania plików z różnych katalogów. Poziom kompresji jest najszybszy , aby skrócić czas przetwarzania. Parametr DestinationPath określa lokalizację Draft.zip
pliku. Plik Draft.zip
zawiera Draftdoc.docx
i wszystkie pliki z .vsd
rozszerzeniem.
Przykład 2. Kompresowanie plików przy użyciu metody LiteralPath
W tym przykładzie kompresuje określone nazwane pliki i tworzy nowy plik archiwum. W pliku archiwum nie ma struktury katalogów, ponieważ ścieżka określa tylko nazwy plików.
$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress
Używana jest ścieżka bezwzględna i nazwy plików, ponieważ parametr LiteralPath nie akceptuje symboli wieloznacznych. Ścieżka używa listy rozdzielanej przecinkami do pobierania plików z różnych katalogów. Poziom kompresji jest najszybszy , aby skrócić czas przetwarzania. Parametr DestinationPath określa lokalizację Draft.zip
pliku. Plik Draft.zip
zawiera Draftdoc.docx
tylko pliki i diagram2.vsd
.
Przykład 3. Kompresowanie katalogu zawierającego katalog główny
Ten przykład kompresuje katalog i tworzy plik archiwum zawierający katalog główny oraz wszystkie jego pliki i podkatalogi. Plik archiwum ma strukturę katalogu, ponieważ ścieżka określa katalog główny.
Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip
Compress-Archive
używa parametru Path, aby określić katalog główny . C:\Reference
Parametr DestinationPath określa lokalizację pliku archiwum. Archiwum Draft.zip
zawiera Reference
katalog główny oraz wszystkie jego pliki i podkatalogi.
Przykład 4. Kompresowanie katalogu, który wyklucza katalog główny
Ten przykład kompresuje katalog i tworzy plik archiwum, który wyklucza katalog główny, ponieważ ścieżka używa gwiazdki (*
) wieloznacznej. Archiwum zawiera strukturę katalogów zawierającą pliki i podkatalogi katalogu głównego.
Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip
Compress-Archive
używa parametru Path , aby określić katalog C:\Reference
główny z gwiazdką (*
) symbolem wieloznacznymi. Parametr DestinationPath określa lokalizację pliku archiwum. Archiwum Draft.zip
zawiera pliki i podkatalogi katalogu głównego. Katalog Reference
główny jest wykluczony z archiwum.
Przykład 5. Kompresowanie tylko plików w katalogu głównym
Ten przykład kompresuje tylko pliki w katalogu głównym i tworzy plik archiwum. Nie ma struktury katalogów w archiwum, ponieważ kompresowane są tylko pliki.
Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip
Compress-Archive
używa parametru Path , aby określić katalog główny z C:\Reference
symbolem wieloznacznymi gwiazdka-kropka (*.*
). Parametr DestinationPath określa lokalizację pliku archiwum. Archiwum Draft.zip
zawiera Reference
tylko pliki katalogu głównego, a katalog główny jest wykluczony.
Przykład 6. Używanie potoku do archiwizowania plików
W tym przykładzie pliki są wysyłane w dół potoku w celu utworzenia archiwum. W pliku archiwum nie ma struktury katalogów, ponieważ ścieżka określa tylko nazwy plików.
Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip
Get-ChildItem
używa parametru Ścieżka , aby określić dwa pliki z różnych katalogów. Każdy plik jest reprezentowany przez obiekt FileInfo i jest wysyłany w dół potoku do Compress-Archive
.
Dwa określone pliki są archiwizowane w pliku PipelineFiles.zip
.
Przykład 7. Użyj potoku, aby zarchiwizować katalog
Ten przykład wysyła katalog w dół potoku, aby utworzyć archiwum. Pliki są wysyłane jako obiekty FileInfo i katalogi jako obiekty DirectoryInfo . Struktura katalogów archiwum nie zawiera katalogu głównego, ale jego pliki i podkatalogi znajdują się w archiwum.
Get-ChildItem -Path C:\LogFiles | Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip
Get-ChildItem
używa parametru Ścieżka , aby określić C:\LogFiles
katalog główny. Każdy obiekt FileInfo i DirectoryInfo jest wysyłany w dół potoku.
Compress-Archive
dodaje każdy obiekt do PipelineDir.zip
archiwum. Parametr Path nie jest określony, ponieważ obiekty potoku są odbierane do pozycji parametru 0.
Przykład 8. Jak rekursja może mieć wpływ na archiwa
W tym przykładzie pokazano, jak rekursja może duplikować pliki w archiwum. Jeśli na przykład używasz parametru Get-ChildItem
Recurse . W ramach procesów rekursji każdy obiekt FileInfo i DirectoryInfo jest wysyłany w dół potoku i dodawany do archiwum.
Get-ChildItem -Path C:\TestLog -Recurse |
Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip
Katalog C:\TestLog
nie zawiera żadnych plików. Zawiera podkatalog o nazwie testsub
, który zawiera testlog.txt
plik.
Get-ChildItem
używa parametru Path, aby określić katalog główny . C:\TestLog
Parametr Recurse przetwarza pliki i katalogi. Obiekt DirectoryInfo jest tworzony dla testsub
i obiekt testlog.txt
FileInfo .
Każdy obiekt jest wysyłany w dół potoku do Compress-Archive
elementu . DestinationPath określa lokalizację pliku archiwum. Parametr Path nie jest określony, ponieważ obiekty potoku są odbierane do pozycji parametru 0.
W poniższym podsumowaniu opisano PipelineRecurse.zip
zawartość archiwum zawierającą zduplikowany plik:
- Obiekt DirectoryInfo tworzy
testsub
katalog i zawieratestlog.txt
plik, który odzwierciedla oryginalną strukturę katalogu. - Obiekt FileInfo tworzy duplikat
testlog.txt
w katalogu głównym archiwum. Zduplikowany plik jest tworzony, ponieważ rekursja wysłała obiekt pliku doCompress-Archive
obiektu . To zachowanie jest oczekiwane, ponieważ każdy obiekt wysłany w dół potoku jest dodawany do archiwum.
Przykład 9. Aktualizowanie istniejącego pliku archiwum
W tym przykładzie zaktualizowano istniejący plik archiwum , Draft.zip
w C:\Archives
katalogu . W tym przykładzie istniejący plik archiwum zawiera katalog główny oraz jego pliki i podkatalogi.
Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip
Polecenie aktualizuje Draft.zip
nowsze wersje istniejących plików w C:\Reference
katalogu i jego podkatalogach. Nowe pliki, które zostały dodane do C:\Reference
lub jego podkatalogów, są uwzględniane w zaktualizowanym Draft.zip
archiwum.
Parametry
-CompressionLevel
Określa, ile kompresji należy zastosować podczas tworzenia pliku archiwum. Szybsza kompresja wymaga mniej czasu na utworzenie pliku, ale może spowodować większe rozmiary plików.
Jeśli ten parametr nie zostanie określony, polecenie użyje wartości domyślnej Optimal.
Poniżej przedstawiono dopuszczalne wartości tego parametru:
- Najszybsze. Użyj najszybszej dostępnej metody kompresji, aby skrócić czas przetwarzania. Szybsza kompresja może spowodować większe rozmiary plików.
- NoCompression. Nie kompresuje plików źródłowych.
- Optymalne. Czas przetwarzania zależy od rozmiaru pliku.
Typ: | String |
Dopuszczalne wartości: | Optimal, NoCompression, Fastest |
Position: | Named |
Domyślna wartość: | Optimal |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Confirm
Monituje o potwierdzenie przed uruchomieniem polecenia cmdlet.
Typ: | SwitchParameter |
Aliasy: | cf |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-DestinationPath
Ten parametr jest wymagany i określa ścieżkę do pliku wyjściowego archiwum. Ścieżka Docelowa powinna zawierać nazwę spakowanego pliku oraz ścieżkę bezwzględną lub względną do spakowanego pliku.
Jeśli nazwa pliku w pliku DestinationPath nie ma .zip
rozszerzenia nazwy pliku, polecenie cmdlet dodaje .zip
rozszerzenie nazwy pliku.
Typ: | String |
Position: | 1 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Force
Użyj tego parametru, aby zastąpić istniejący plik archiwum.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-LiteralPath
Określa ścieżkę lub ścieżki do plików, które chcesz dodać do pliku spakowanego archiwum. W przeciwieństwie do parametru Path wartość parametru LiteralPath jest używana dokładnie tak, jak jest typowana. Znaki nie są interpretowane jako symbole wieloznaczne. Jeśli ścieżka zawiera znaki ucieczki, należy ująć każdy znak ucieczki w pojedynczy cudzysłów, aby program PowerShell nie interpretował żadnych znaków jako sekwencji ucieczki. Aby określić wiele ścieżek i dołączyć pliki w wielu lokalizacjach w wyjściowym pliku zip, użyj przecinków, aby oddzielić ścieżki.
Typ: | String[] |
Aliasy: | PSPath |
Position: | Named |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | False |
-PassThru
Powoduje, że polecenie cmdlet wyprowadza obiekt pliku reprezentujący utworzony plik archiwum.
Ten parametr został wprowadzony w programie PowerShell 6.0.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-Path
Określa ścieżkę lub ścieżki do plików, które chcesz dodać do pliku spakowanego archiwum. Aby określić wiele ścieżek i dołączyć pliki w wielu lokalizacjach, użyj przecinków, aby oddzielić ścieżki.
Ten parametr akceptuje symbole wieloznaczne. Symbole wieloznaczne umożliwiają dodawanie wszystkich plików w katalogu do pliku archiwum.
Używanie symboli wieloznacznych z katalogiem głównym wpływa na zawartość archiwum:
- Aby utworzyć archiwum zawierające katalog główny oraz wszystkie jego pliki i podkatalogi, określ katalog główny w ścieżce bez symboli wieloznacznych. Na przykład:
-Path C:\Reference
. - Aby utworzyć archiwum, które wyklucza katalog główny, ale spakuje wszystkie jego pliki i podkatalogi, użyj symbolu wieloznakowego gwiazdki (
*
). Na przykład:-Path C:\Reference\*
. - Aby utworzyć archiwum, które spakuje tylko pliki w katalogu głównym, użyj symbolu wieloznakowego star-dot-star (
*.*
). Podkatalogi katalogu głównego nie są uwzględniane w archiwum. Na przykład:-Path C:\Reference\*.*
.
Typ: | String[] |
Position: | 0 |
Domyślna wartość: | None |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | True |
Akceptowanie symboli wieloznacznych: | True |
-Update
Aktualizuje określone archiwum, zastępując starsze wersje plików w archiwum nowszymi wersjami plików o tych samych nazwach. Możesz również dodać ten parametr, aby dodać pliki do istniejącego archiwum.
Typ: | SwitchParameter |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | True |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
-WhatIf
Pokazuje, co się stanie po uruchomieniu polecenia cmdlet. Polecenie cmdlet nie jest uruchamiane.
Typ: | SwitchParameter |
Aliasy: | wi |
Position: | Named |
Domyślna wartość: | False |
Wymagane: | False |
Akceptowanie danych wejściowych potoku: | False |
Akceptowanie symboli wieloznacznych: | False |
Dane wejściowe
Możesz potokować ciąg zawierający ścieżkę do co najmniej jednego pliku.
Dane wyjściowe
None
Domyślnie to polecenie cmdlet nie zwraca żadnych danych wyjściowych.
Jeśli używasz parametru PassThru , to polecenie cmdlet zwraca obiekt FileInfo .
Uwagi
Używanie rekursji i wysyłanie obiektów w dół potoku może duplikować pliki w archiwum. Jeśli na przykład używasz z Get-ChildItem
parametrem Recurse , każdy obiekt FileInfo i DirectoryInfo , który jest wysyłany w dół potoku, zostanie dodany do archiwum.
Polecenie Compress-Archive
cmdlet używa kodowania UTF-8. Inne narzędzia archiwum ZIP mogą używać innego schematu kodowania. Podczas wyodrębniania plików z nazwami plików, które nie są przechowywane przy użyciu kodowania UTF-8, Expand-Archive
używa wartości pierwotnej znalezionej w archiwum. Może to spowodować, że nazwa pliku różni się od nazwy pliku źródłowego przechowywanego w archiwum.