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.docx
和 diagram2.vsd
。
範例 3:壓縮包含根目錄的目錄
此範例會壓縮目錄,並建立包含根目錄的封存盤案,以及其所有檔案和子目錄。 封存盤案具有目錄結構,因為 Path 會指定根目錄。
Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip
Compress-Archive
使用 Path 參數來指定根目錄 C:\Reference
。 DestinationPath 參數會指定封存盤案的位置。 封 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:\TestLog
。 Recurse 參數會處理檔案和目錄。 已針對 testsub
和 FileInfo 物件建立 DirectoryInfo 物件testlog.txt
。
每個物件都會將管線向下傳送至 Compress-Archive
。 DestinationPath 會指定封存盤案的位置。 未指定Path參數,因為管線物件會接收到參數位置0。
下列摘要描述 PipelineRecurse.zip
包含重複檔案的封存內容:
- DirectoryInfo 物件會
testsub
建立目錄,並包含testlog.txt
反映原始目錄結構的檔案。 - FileInfo 物件會在封存的根目錄中建立重複
testlog.txt
專案。 因為遞歸將檔案物件傳送至Compress-Archive
,因此會建立重複的檔案。 這是預期的行為,因為每個下送管線的物件都會新增至封存。
範例 9:更新現有的封存盤案
這個範例會更新 目錄中現有的封存盤案 Draft.zip
C:\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 |
輸入
您可以使用管線將包含路徑的字串傳送至一或多個檔案。
輸出
None
根據預設,此 Cmdlet 不會傳回任何輸出。
當您使用 PassThru 參數時,這個 Cmdlet 會 傳回 FileInfo 物件。
備註
使用遞歸並將物件傳送到管線,可能會複製封存中的檔案。 例如,如果您使用 Get-ChildItem
Recurse 參數,則會將傳送到管線的每個 FileInfo 和 DirectoryInfo 物件新增至封存。
Cmdlet Compress-Archive
使用 UTF-8 編碼。 其他 ZIP 封存工具可能會使用不同的編碼配置。 擷取檔名未使用 UTF-8 編碼方式儲存的檔案時, Expand-Archive
會使用封存中找到的原始值。 這可能會導致檔名與封存中儲存的來源檔名不同。