Compress-Archive

從指定的檔案和目錄建立壓縮檔案或壓縮檔案。

語法

Path (預設值)

Compress-Archive
    [-Path] <String[]>
    [-DestinationPath] <String>
    [-CompressionLevel <String>]
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

PathWithUpdate

Compress-Archive
    [-Path] <String[]>
    [-DestinationPath] <String>
    -Update
    [-CompressionLevel <String>]
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

PathWithForce

Compress-Archive
    [-Path] <String[]>
    [-DestinationPath] <String>
    -Force
    [-CompressionLevel <String>]
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

LiteralPathWithUpdate

Compress-Archive
    [-DestinationPath] <String>
    -LiteralPath <String[]>
    -Update
    [-CompressionLevel <String>]
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

LiteralPathWithForce

Compress-Archive
    [-DestinationPath] <String>
    -LiteralPath <String[]>
    -Force
    [-CompressionLevel <String>]
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

LiteralPath

Compress-Archive
    [-DestinationPath] <String>
    -LiteralPath <String[]>
    [-CompressionLevel <String>]
    [-PassThru]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

Compress-Archive指令小程式會從一個或多個指定的檔案或目錄中建立壓縮或壓縮的歸檔檔案。 檔案庫會將多個檔案打包成一個壓縮檔,並可選擇壓縮,方便分發與儲存。 壓縮檔檔案可依 據 CompressionLevel 參數指定的壓縮演算法進行壓縮。

Compress-Archive Cmdlet 會使用 System.IO.Compression.ZipArchive API 來壓縮檔案。 API 會將檔案大小上限限製為 2GB。 更多資訊請參見 System.IO.Compression.ZipArchive。

Note

在建立或更新壓縮檔時,指令 Compress-Archive 小子會忽略隱藏的檔案和資料夾。 在非Windows機器上,這包括名稱以句點 (.) 字元開頭的檔案和資料夾。

為了確保隱藏檔案和資料夾被壓縮進壓縮檔,請改用 .NET API。

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

範例

範例 1:壓縮檔案以建立歸檔檔案

此範例是從不同目錄壓縮檔案並建立一個壓縮檔案。 萬用字元來取得所有具有特定副檔名的檔案。 壓縮檔檔案中沒有目錄結構,因為 路徑 只指定檔名。

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

Path 參數接受特定檔案名稱及帶有萬用字元的檔名。 *.vsd 路徑使用逗號分隔的清單來取得來自不同目錄的檔案。 壓縮等級是 最快 的,以縮短處理時間。 DestinationPath 參數指定檔案的位置Draft.zip。 該 Draft.zip 檔案包含 Draftdoc.docx 所有帶有 .vsd 副檔名的檔案。

範例 2:使用字面路徑壓縮檔案

此範例壓縮特定命名檔案並建立新的壓縮檔。 壓縮檔檔案中沒有目錄結構,因為 路徑 只指定檔名。

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

使用絕對路徑和檔名是因為 LiteralPath 參數不接受萬用字元。 路徑使用逗號分隔的清單來取得來自不同目錄的檔案。 壓縮等級是 最快 的,以縮短處理時間。 DestinationPath 參數指定檔案的位置Draft.zip。 該 Draft.zip 檔案僅包含 Draftdoc.docx 和 diagram2.vsd。

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

此範例壓縮一個目錄並建立 包含 根目錄及其所有檔案和子目錄的壓縮檔。 該檔案具有目錄結構,因為 路徑 指定了根目錄。

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

Compress-Archive 使用 Path 參數來指定根目錄 C:\Reference。 DestinationPath 參數指定了歸檔檔案的位置。 該 Draft.zip 壓縮檔包含 Reference 根目錄及其所有檔案和子目錄。

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

此範例壓縮目錄並建立 一個檔案 ,該檔案排除根目錄,因為 路徑 使用星號(*)萬用符。 該壓縮檔包含一個目錄結構,裡面包含根目錄的檔案和子目錄。

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:使用管線來封存檔案

這個例子是將檔案送入管線以建立一個壓縮檔。 壓縮檔檔案中沒有目錄結構,因為 路徑 只指定檔名。

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 。 路徑 參數未 被指定,因為管線物件會被接收到參數位置 0。

範例 8:遞迴如何影響檔案庫

這個例子展示了遞迴如何複製你的檔案庫。 例如,如果你使用 Get-ChildItem 遞 迴 參數。 隨著遞迴處理,每個 FileInfo 和 DirectoryInfo 物件會被送入管線並加入壓縮檔。

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

目錄 C:\TestLog 裡沒有任何檔案。 它確實包含一個名為 testsub 子目錄的子目錄,裡面包含了該 testlog.txt 檔案。

Get-ChildItem 使用 Path 參數來指定根目錄 C:\TestLog。 遞迴參數負責處理檔案和目錄。 會建立一個 DirectoryInfo 物件,以及 testsub 一個 FileInfo 物件 testlog.txt。

每個物件會被送入管線到 Compress-Archive。 DestinationPath 指定了歸檔檔案的位置。 路徑 參數未 被指定,因為管線物件會被接收到參數位置 0。

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

  • DirectoryInfo 物件testsub建立目錄並包含testlog.txt反映原始目錄結構的檔案。
  • FileInfo 物件會在壓縮檔根建立一個重複的副本testlog.txt。 重複檔案是因為遞迴將檔案物件傳送到 Compress-Archive。 這種行為是預期中的,因為每個送入管線的物件都會被加入壓縮檔。

範例 9:更新現有的壓縮檔

此範例更新目錄中C:\Archives一個已存在的壓縮檔檔案 Draft.zip, , 在此範例中,現有的壓縮檔包含根目錄及其檔案和子目錄。

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

該指令會更新 Draft.zip 目錄中現有檔案 C:\Reference 的新版本及其子目錄。 而且新增的檔案 C:\Reference 或其子目錄也會包含在更新 Draft.zip 的檔案庫中。

參數

-CompressionLevel

它會指定建立壓縮檔時要施加多少壓縮。 較快的壓縮速度較短,但檔案大小可能變大。

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

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

  • 最快。 使用最快的壓縮方法來縮短處理時間。 更快的壓縮會導致檔案大小變大。
  • 沒有壓縮。 它不會壓縮原始檔案。
  • 最佳: 處理時間取決於檔案大小。

參數屬性

類型:String
預設值:Optimal
接受的值:Optimal, NoCompression, Fastest
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Confirm

在執行 Cmdlet 之前,提示您進行確認。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:參見

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-DestinationPath

此參數為必備,並指定壓縮檔輸出檔案的路徑。 DestinationPath 應包含壓縮檔案名稱,以及壓縮檔案的絕對或相對路徑。

如果 DestinationPath 中的檔名沒有 .zip 副檔名,指令本會加入 .zip 副檔名。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:1
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Force

使用此參數覆蓋現有的壓縮檔檔案。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

PathWithForce
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
LiteralPathWithForce
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-LiteralPath

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

參數屬性

類型:

String[]

預設值:None
支援萬用字元:False
不要顯示:False
別名:PSPath

參數集

LiteralPathWithUpdate
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
LiteralPathWithForce
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
LiteralPath
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-PassThru

會讓指令長檔輸出一個代表已建立壓縮檔案的檔案物件。

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

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Path

指定你想加入壓縮檔案的檔案路徑。 若要指定多條路徑,並在多個位置包含檔案,請使用逗號分隔這些路徑。

此參數接受通配字元。 萬用字元允許你將目錄中的所有檔案加入你的壓縮檔。

使用根目錄的萬用字元會影響檔案內容:

  • 若要建立 包含 根目錄及其所有檔案和子目錄的壓縮檔,請在 路徑 中指定根目錄且不加萬用字元。 例如: -Path C:\Reference
  • 若要建立一個 排除 根目錄但壓縮所有檔案與子目錄的壓縮檔,請使用星號(*)萬用卡。 例如: -Path C:\Reference\*
  • 若要建立只壓縮根目錄檔案的壓縮檔,請使用 star-dot-star (*.*) 萬用卡。 根節點的子目錄不包含在壓縮檔中。 例如: -Path C:\Reference\*.*

參數屬性

類型:

String[]

預設值:None
支援萬用字元:True
不要顯示:False

參數集

Path
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
PathWithUpdate
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:True
來自剩餘引數的值:False
PathWithForce
Position:0
必要:True
來自管線的值:True
來自管線按屬性名稱的值:True
來自剩餘引數的值:False

-Update

透過將舊檔案版本替換為名稱相同的新檔案版本,來更新指定的壓縮檔。 你也可以新增這個參數,將檔案加入現有的檔案庫。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False

參數集

PathWithUpdate
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False
LiteralPathWithUpdate
Position:Named
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-WhatIf

顯示 Cmdlet 執行時會發生什麼事。 該 Cmdlet 未被執行。

參數屬性

類型:SwitchParameter
預設值:False
支援萬用字元:False
不要顯示:False
別名:威斯康辛

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 cmdlet 支援常見參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters。

輸入

String

你可以將包含路徑的字串導向一個或多個檔案。

輸出

None

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

FileInfo

當你使用 PassThru 參數時,這個 cmdlet 會回傳一個 FileInfo 物件。

備註

使用遞迴並將物件送入管線,可以在你的檔案庫中複製檔案。 例如,如果你使用 Get-ChildItem 遞 迴 參數,每個送入管線的 FileInfo 和 DirectoryInfo 物件都會被加入壓縮檔。

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