共用方式為


Compress-Archive

從指定的檔案和目錄建立壓縮的 ZIP 封存。

語法

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

Cmdlet Compress-Archive 會從一或多個指定的檔案或目錄建立壓縮或壓縮的封存盤案。 封存封裝多個檔案,並選擇性壓縮成單一壓縮檔,以方便散發和儲存。 封存盤案可以使用 CompressionLevel 參數指定的壓縮演算法進行壓縮。

Cmdlet Compress-Archive 會使用 System.IO.Compression.ZipArchive API 來壓縮檔案。 API 會將檔案大小上限限製為 2GB。 .NET API 適用於 PKWARE Inc. 符合官方 ZIP 檔案格式規格的檔案。如需詳細資訊,請參閱 System.IO.Compression.ZipArchive

注意

Cmdlet Compress-Archive 會在建立或更新封存盤案時忽略隱藏的檔案和資料夾。 在非 Windows 電腦上,這包括名稱開頭為句號 (.) 字元的檔案和資料夾。

若要確保隱藏的檔案和資料夾壓縮到封存中,請改用 .NET API。

某些範例會使用噴濺來減少程式代碼範例的行長度。 如需詳細資訊,請參閱 about_Splatting

範例

範例 1:壓縮檔以建立封存盤案

此範例會壓縮來自不同目錄的檔案,並建立封存盤案。 通配符可用來取得具有特定擴展名的所有檔案。 封存盤案中沒有目錄結構,因為 Path 只會指定檔名。

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

Path 參數會接受具有通配符的特定檔名和檔名。 *.vsd Path 會使用逗號分隔清單,從不同的目錄取得檔案。 壓縮層級是 縮短處理時間最快的DestinationPath 參數會指定檔案的位置Draft.zip。 檔案 Draft.zip 包含 Draftdoc.docx 擴展名的所有檔案 .vsd

範例 2:使用 LiteralPath 壓縮檔案

此範例會壓縮特定的具名檔案,並建立新的封存盤案。 封存盤案中沒有目錄結構,因為 Path 只會指定檔名。

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

使用絕對路徑和檔名,因為 LiteralPath 參數不接受通配符。 Path 會使用逗號分隔清單,從不同的目錄取得檔案。 壓縮層級是 縮短處理時間最快的DestinationPath 參數會指定檔案的位置Draft.zip。 檔案 Draft.zip 只包含 Draftdoc.docxdiagram2.vsd

範例 3:壓縮包含根目錄的目錄

此範例會壓縮目錄,並建立包含根目錄的封存盤案,以及其所有檔案和子目錄。 封存盤案具有目錄結構,因為 Path 會指定根目錄。

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

Compress-Archive使用 Path 參數來指定根目錄 C:\ReferenceDestinationPath 參數會指定封存盤案的位置。 封 Draft.zip 存包含 Reference 根目錄,以及其所有檔案和子目錄。

範例 4:壓縮排除根目錄的目錄

此範例會壓縮目錄並建立封存盤案, 以排除 根目錄,因為 Path 使用星號 (*) 通配符。 封存包含包含根目錄檔案和子目錄的目錄結構。

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

Compress-Archive會使用Path參數來指定根目錄,C:\Reference並使用星號 (*) 通配符。 DestinationPath 參數會指定封存盤案的位置。 封 Draft.zip 存包含根目錄的檔案和子目錄。 根 Reference 目錄會從封存中排除。

範例 5:僅壓縮根目錄中的檔案

此範例只會壓縮根目錄中的檔案,並建立封存盤案。 封存中沒有目錄結構,因為只有檔案會壓縮。

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

Compress-Archive會使用Path參數來指定根目錄,C:\Reference並使用星點-星號 (*.*) 通配符。 DestinationPath 參數會指定封存盤案的位置。 封 Draft.zip 存只包含 Reference 根目錄的檔案,而且會排除根目錄。

範例 6:使用管線封存盤案

此範例會將檔案傳送至管線以建立封存。 封存盤案中沒有目錄結構,因為 Path 只會指定檔名。

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

Get-ChildItem會使用Path參數來指定來自不同目錄的兩個檔案。 每個檔案都會以 FileInfo 物件表示,並將管線向下傳送至 Compress-Archive。 兩個指定的檔案會封存於 中 PipelineFiles.zip

範例 7:使用管線封存目錄

本範例會將目錄傳送至管線以建立封存。 檔案會以 FileInfo 物件和目錄的形式傳送為 DirectoryInfo 物件。 封存的目錄結構不包含根目錄,但其檔案和子目錄會包含在封存中。

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

Get-ChildItem會使用Path參數來指定C:\LogFiles根目錄。 每個 FileInfo 和 DirectoryInfo 物件都會在管線下傳送。

Compress-Archive 將每個物件新增至封 PipelineDir.zip 存。 未指定Path參數,因為管線物件會接收到參數位置0。

範例 8:遞迴如何影響封存

此範例示範遞歸如何複製封存中的檔案。 例如,如果您使用 Get-ChildItem Recurse 參數。 遞歸處理時,每個 FileInfo 和 DirectoryInfo 物件都會向下傳送管線,並新增至封存。

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

目錄 C:\TestLog 不包含任何檔案。 它確實包含名為 testsub 的子目錄,其中包含 檔案 testlog.txt

Get-ChildItem使用 Path 參數來指定根目錄 C:\TestLogRecurse 參數會處理檔案和目錄。 已針對 testsubFileInfo 物件建立 DirectoryInfo 物件testlog.txt

每個物件都會將管線向下傳送至 Compress-ArchiveDestinationPath 會指定封存盤案的位置。 未指定Path參數,因為管線物件會接收到參數位置0。

下列摘要描述 PipelineRecurse.zip 包含重複檔案的封存內容:

  • DirectoryInfo 物件會testsub建立目錄,並包含testlog.txt反映原始目錄結構的檔案。
  • FileInfo 物件會在封存的根目錄中建立重複testlog.txt專案。 因為遞歸將檔案物件傳送至 Compress-Archive,因此會建立重複的檔案。 這是預期的行為,因為每個下送管線的物件都會新增至封存。

範例 9:更新現有的封存盤案

這個範例會更新 目錄中現有的封存盤案 Draft.zipC:\Archives 。 在此範例中,現有的封存盤案包含根目錄,以及其檔案和子目錄。

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

命令會更新 Draft.zip 目錄中較新版本的現有檔案 C:\Reference 及其子目錄中。 此外,已新增至 C:\Reference 或其子目錄的新檔案會包含在更新 Draft.zip 的封存中。

參數

-CompressionLevel

指定要在建立封存盤案時套用多少壓縮。 較快的壓縮需要較少的時間來建立檔案,但可能會導致較大的檔案大小。

如果未指定此參數,命令會使用預設值 Optimal

以下是此參數可接受的值:

  • 最快。 使用最快的壓縮方法,以減少處理時間。 更快速的壓縮可能會導致較大的檔案大小。
  • NoCompression。 不會壓縮來源檔案。
  • 最佳: 處理時間取決於檔案大小。
類型:String
接受的值:Optimal, NoCompression, Fastest
Position:Named
預設值:Optimal
必要:False
接受管線輸入:False
接受萬用字元:False

-Confirm

執行 Cmdlet 之前先提示您確認。

類型:SwitchParameter
別名:cf
Position:Named
預設值:False
必要:False
接受管線輸入:False
接受萬用字元:False

-DestinationPath

這是必要參數,並指定封存輸出檔的路徑。 DestinationPath 應該包含壓縮文件的名稱,以及壓縮檔案的絕對或相對路徑。

如果 DestinationPath 中的檔名沒有.zip擴展名,Cmdlet 會新增.zip擴展名。

類型:String
Position:1
預設值:None
必要:True
接受管線輸入:False
接受萬用字元:False

-Force

使用此參數覆寫現有的封存盤案。

類型:SwitchParameter
Position:Named
預設值:False
必要:True
接受管線輸入:False
接受萬用字元:False

-LiteralPath

指定您要新增至封存壓縮檔案的路徑或路徑。 與 Path 參數不同,LiteralPath 的值會與輸入時完全相同。 不會將任何字元解譯為通配符。 如果路徑包含逸出字元,請以單引弧括住每個逸出字元,以指示PowerShell不要將任何字元解譯為逸出序列。 若要指定多個路徑,並在輸出壓縮檔案的多個位置中包含檔案,請使用逗號來分隔路徑。

類型:String[]
別名:PSPath
Position:Named
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:False

-PassThru

導致 Cmdlet 輸出代表所建立封存盤案的檔案物件。

此參數是在 PowerShell 6.0 中引進的。

類型:SwitchParameter
Position:Named
預設值:False
必要:False
接受管線輸入:False
接受萬用字元:False

-Path

指定您要新增至封存壓縮檔案的路徑或路徑。 若要指定多個路徑,並在多個位置包含檔案,請使用逗號來分隔路徑。

此參數接受通配符。 通配符可讓您將目錄中的所有檔案新增至封存盤案。

搭配根目錄使用通配符會影響封存的內容:

  • 若要建立包含根目錄的封存,以及其所有檔案和子目錄,請在Path中指定不含通配符的根目錄。 例如:-Path C:\Reference
  • 若要建立排除根目錄的封存,但壓縮其所有檔案和子目錄,請使用星號 (*) 通配符。 例如:-Path C:\Reference\*
  • 若要建立只壓縮根目錄中檔案的封存,請使用 星點星 號 (*.*) 通配符。 根目錄不會包含在封存中。 例如:-Path C:\Reference\*.*
類型:String[]
Position:0
預設值:None
必要:True
接受管線輸入:True
接受萬用字元:True

-Update

以具有相同名稱的較新版本取代封存中的較舊檔案版本,以更新指定的封存。 您也可以新增此參數,將檔案新增至現有的封存。

類型:SwitchParameter
Position:Named
預設值:False
必要:True
接受管線輸入:False
接受萬用字元:False

-WhatIf

顯示執行 Cmdlet 後會發生的情況。 Cmdlet 未執行。

類型:SwitchParameter
別名:wi
Position:Named
預設值:False
必要:False
接受管線輸入:False
接受萬用字元:False

輸入

String

您可以使用管線將包含路徑的字串傳送至一或多個檔案。

輸出

None

根據預設,此 Cmdlet 不會傳回任何輸出。

FileInfo

當您使用 PassThru 參數時,這個 Cmdlet 會 傳回 FileInfo 物件。

備註

使用遞歸並將物件傳送到管線,可能會複製封存中的檔案。 例如,如果您使用 Get-ChildItem Recurse 參數,則會將傳送到管線的每個 FileInfo 和 DirectoryInfo 物件新增至封存。

Cmdlet Compress-Archive 使用 UTF-8 編碼。 其他 ZIP 封存工具可能會使用不同的編碼配置。 擷取檔名未使用 UTF-8 編碼方式儲存的檔案時, Expand-Archive 會使用封存中找到的原始值。 這可能會導致檔名與封存中儲存的來源檔名不同。