Share via


Compress-Archive

Skapar ett komprimerat arkiv, eller en zippad fil, från angivna filer och kataloger.

Syntax

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>]

Description

Cmdleten Compress-Archive skapar en komprimerad eller zippad arkivfil från en eller flera angivna filer eller kataloger. Ett arkiv paket flera filer, med valfri komprimering, i en enda zippad fil för enklare distribution och lagring. En arkivfil kan komprimeras med hjälp av komprimeringsalgoritmen som anges av parametern CompressionLevel .

Cmdleten Compress-Archive använder API:et System.IO.Compression.ZipArchive för att komprimera filer. API:et begränsar den maximala filstorleken till 2 GB. Mer information finns i System.IO.Compression.ZipArchive.

Kommentar

Cmdleten Compress-Archive ignorerar dolda filer och mappar när du skapar eller uppdaterar arkivfilen. På datorer som inte är Windows innehåller detta filer och mappar med namn som börjar med periodtecknet (.).

Om du vill se till att dolda filer och mappar komprimeras till arkivet använder du .NET-API:et i stället.

Vissa exempel använder splatting för att minska radlängden för kodexemplen. Mer information finns i about_Splatting.

Exempel

Exempel 1: Komprimera filer för att skapa en arkivfil

Det här exemplet komprimerar filer från olika kataloger och skapar en arkivfil. Ett jokertecken används för att hämta alla filer med ett visst filnamnstillägg. Det finns ingen katalogstruktur i arkivfilen eftersom sökvägen endast anger filnamn.

$compress = @{
  Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
  CompressionLevel = "Fastest"
  DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

Parametern Path accepterar specifika filnamn och filnamn med jokertecken, *.vsd. Sökvägen använder en kommaavgränsad lista för att hämta filer från olika kataloger. Komprimeringsnivån är snabbast för att minska bearbetningstiden. Parametern DestinationPath anger platsen för Draft.zip filen. Filen Draft.zip innehåller Draftdoc.docx och alla filer med ett .vsd tillägg.

Exempel 2: Komprimera filer med hjälp av en LiteralPath

Det här exemplet komprimerar specifika namngivna filer och skapar en ny arkivfil. Det finns ingen katalogstruktur i arkivfilen eftersom sökvägen endast anger filnamn.

$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

Absolut sökväg och filnamn används eftersom parametern LiteralPath inte accepterar jokertecken. Sökvägen använder en kommaavgränsad lista för att hämta filer från olika kataloger. Komprimeringsnivån är snabbast för att minska bearbetningstiden. Parametern DestinationPath anger platsen för Draft.zip filen. Filen Draft.zip innehåller Draftdoc.docx bara och diagram2.vsd.

Exempel 3: Komprimera en katalog som innehåller rotkatalogen

Det här exemplet komprimerar en katalog och skapar en arkivfil som innehåller rotkatalogen och alla dess filer och underkataloger. Arkivfilen har en katalogstruktur eftersom sökvägen anger en rotkatalog.

Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip

Compress-Archive använder parametern Path för att ange rotkatalogen, C:\Reference. Parametern DestinationPath anger platsen för arkivfilen. Arkivet Draft.zip innehåller rotkatalogen Reference och alla dess filer och underkataloger.

Exempel 4: Komprimera en katalog som exkluderar rotkatalogen

Det här exemplet komprimerar en katalog och skapar en arkivfil som exkluderar rotkatalogen eftersom sökvägen använder ett asterisk* () jokertecken. Arkivet innehåller en katalogstruktur som innehåller rotkatalogens filer och underkataloger.

Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip

Compress-Archive använder parametern Path för att ange rotkatalogen C:\Reference med ett asterisk* () jokertecken. Parametern DestinationPath anger platsen för arkivfilen. Arkivet Draft.zip innehåller rotkatalogens filer och underkataloger. Rotkatalogen Reference undantas från arkivet.

Exempel 5: Komprimera endast filerna i en rotkatalog

Det här exemplet komprimerar endast filerna i en rotkatalog och skapar en arkivfil. Det finns ingen katalogstruktur i arkivet eftersom endast filer komprimeras.

Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip

Compress-Archive använder parametern Sökväg för att ange rotkatalogen med C:\Reference jokerteckenet star-dot-star (*.*). Parametern DestinationPath anger platsen för arkivfilen. Arkivet Draft.zip innehåller bara rotkatalogens Reference filer och rotkatalogen undantas.

Exempel 6: Använd pipelinen för att arkivera filer

Det här exemplet skickar filer nedåt i pipelinen för att skapa ett arkiv. Det finns ingen katalogstruktur i arkivfilen eftersom sökvägen endast anger filnamn.

Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
  Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip

Get-ChildItem använder parametern Path för att ange två filer från olika kataloger. Varje fil representeras av ett FileInfo-objekt och skickas ned i pipelinen till Compress-Archive. De två angivna filerna arkiveras i PipelineFiles.zip.

Exempel 7: Använd pipelinen för att arkivera en katalog

Det här exemplet skickar en katalog nedåt i pipelinen för att skapa ett arkiv. Filer skickas som FileInfo-objekt och kataloger som DirectoryInfo-objekt . Arkivets katalogstruktur innehåller inte rotkatalogen, men dess filer och underkataloger ingår i arkivet.

Get-ChildItem -Path C:\LogFiles | Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip

Get-ChildItem använder parametern Path för att ange rotkatalogen C:\LogFiles . Varje FileInfo - och DirectoryInfo-objekt skickas ned i pipelinen.

Compress-Archive lägger till varje objekt i arkivet PipelineDir.zip . Parametern Path har inte angetts eftersom pipelineobjekten tas emot i parameterposition 0.

Exempel 8: Hur rekursion kan påverka arkiv

Det här exemplet visar hur rekursion kan duplicera filer i ditt arkiv. Om du till exempel använder Get-ChildItem med parametern Recurse . Som rekursionsprocesser skickas varje FileInfo - och DirectoryInfo-objekt ned pipelinen och läggs till i arkivet.

Get-ChildItem -Path C:\TestLog -Recurse |
  Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip

Katalogen C:\TestLog innehåller inga filer. Den innehåller en underkatalog med namnet testsub som innehåller testlog.txt filen.

Get-ChildItem använder parametern Path för att ange rotkatalogen, C:\TestLog. Parametern Recurse bearbetar filerna och katalogerna. Ett DirectoryInfo-objekt skapas för testsub och ett FileInfo-objekttestlog.txt.

Varje objekt skickas ned i pipelinen till Compress-Archive. DestinationPath anger platsen för arkivfilen. Parametern Path har inte angetts eftersom pipelineobjekten tas emot i parameterposition 0.

Följande sammanfattning beskriver arkivets PipelineRecurse.zip innehåll som innehåller en duplicerad fil:

  • DirectoryInfo-objektet skapar testsub katalogen och innehåller testlog.txt filen, vilket återspeglar den ursprungliga katalogstrukturen.
  • FileInfo-objektet skapar en dubblett testlog.txt i arkivets rot. Dubblettfilen skapas eftersom rekursionen skickade ett filobjekt till Compress-Archive. Det här beteendet förväntas eftersom varje objekt som skickas ned i pipelinen läggs till i arkivet.

Exempel 9: Uppdatera en befintlig arkivfil

I det här exemplet uppdateras en befintlig arkivfil, Draft.zip, i C:\Archives katalogen. I det här exemplet innehåller den befintliga arkivfilen rotkatalogen och dess filer och underkataloger.

Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip

Kommandot uppdateras Draft.zip med nyare versioner av befintliga filer i C:\Reference katalogen och dess underkataloger. Och nya filer som har lagts till C:\Reference i eller dess underkataloger ingår i det uppdaterade Draft.zip arkivet.

Parametrar

-CompressionLevel

Anger hur mycket komprimering som ska tillämpas när du skapar arkivfilen. Snabbare komprimering kräver mindre tid för att skapa filen, men kan resultera i större filstorlekar.

Om den här parametern inte anges använder kommandot standardvärdet Optimal.

Följande är godkända värden för den här parametern:

  • Snabbast. Använd den snabbaste komprimeringsmetod som är tillgänglig för att minska bearbetningstiden. Snabbare komprimering kan resultera i större filstorlekar.
  • NoCompression. Komprimerar inte källfilerna.
  • Optimalt. Bearbetningstiden beror på filstorleken.
Type:String
Accepted values:Optimal, NoCompression, Fastest
Position:Named
Default value:Optimal
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

Uppmanar dig att bekräfta innan du kör cmdleten.

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-DestinationPath

Den här parametern krävs och anger sökvägen till arkivutdatafilen. DestinationPath ska innehålla namnet på den zippade filen och antingen den absoluta eller relativa sökvägen till den zippade filen.

Om filnamnet i DestinationPath inte har något .zip filnamnstillägg lägger cmdleten till filnamnstillägget .zip .

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Force

Använd den här parametern för att skriva över en befintlig arkivfil.

Type:SwitchParameter
Position:Named
Default value:False
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

Anger sökvägen eller sökvägarna till de filer som du vill lägga till i den arkiverade zippade filen. Till skillnad från parametern Path används värdet för LiteralPath precis som det skrivs. Inga tecken tolkas som jokertecken. Om sökvägen innehåller escape-tecken omger du varje escape-tecken inom enkla citattecken för att instruera PowerShell att inte tolka några tecken som escape-sekvenser. Om du vill ange flera sökvägar och inkludera filer på flera platser i den zippade utdatafilen använder du kommatecken för att avgränsa sökvägarna.

Type:String[]
Aliases:PSPath
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-PassThru

Gör att cmdleten matar ut ett filobjekt som representerar den arkivfil som skapats.

Den här parametern introducerades i PowerShell 6.0.

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

Anger sökvägen eller sökvägarna till de filer som du vill lägga till i den arkiverade zippade filen. Om du vill ange flera sökvägar och inkludera filer på flera platser använder du kommatecken för att avgränsa sökvägarna.

Den här parametern accepterar jokertecken. Med jokertecken kan du lägga till alla filer i en katalog i din arkivfil.

Om du använder jokertecken med en rotkatalog påverkas innehållet i arkivet:

  • Om du vill skapa ett arkiv som innehåller rotkatalogen och alla dess filer och underkataloger anger du rotkatalogen i sökvägen utan jokertecken. Till exempel: -Path C:\Reference
  • Om du vill skapa ett arkiv som exkluderar rotkatalogen, men zippar alla dess filer och underkataloger, använder du jokertecknet asterisk (*). Till exempel: -Path C:\Reference\*
  • Om du vill skapa ett arkiv som bara zippar filerna i rotkatalogen använder du jokertecknet star-dot-star (*.*). Underkataloger för roten ingår inte i arkivet. Till exempel: -Path C:\Reference\*.*
Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Update

Uppdateringar det angivna arkivet genom att ersätta äldre filversioner i arkivet med nyare filversioner som har samma namn. Du kan också lägga till den här parametern för att lägga till filer i ett befintligt arkiv.

Type:SwitchParameter
Position:Named
Default value:False
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

Visar vad som skulle hända om cmdleten kördes. Cmdleten körs inte.

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Indata

String

Du kan skicka en sträng som innehåller en sökväg till en eller flera filer.

Utdata

None

Som standard returnerar den här cmdleten inga utdata.

FileInfo

När du använder parametern PassThru returnerar den här cmdleten ett FileInfo-objekt .

Kommentarer

Om du använder rekursion och skickar objekt nedåt i pipelinen kan dubbletter av filer i arkivet dupliceras. Om du till exempel använder Get-ChildItem med parametern Recurse läggs varje FileInfo - och DirectoryInfo-objekt som skickas ned i pipelinen till i arkivet.

Cmdleten Compress-Archive använder UTF-8-kodning. Andra ZIP-arkivverktyg kan använda ett annat kodningsschema. När du extraherar filer med filnamn som inte lagras med UTF-8-kodning använder Expand-Archive du det råvärde som finns i arkivet. Detta kan resultera i ett filnamn som skiljer sig från källfilnamnet som lagras i arkivet.