Udostępnij za pośrednictwem


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-Archiveuż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-ChildItemuż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.txtFileInfo .

Każdy obiekt jest wysyłany w dół potoku do Compress-Archiveelementu . 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 zawiera testlog.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 do Compress-Archiveobiektu . 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.zipw 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

String

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.

FileInfo

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.