Categories: PowerShell

PowerShell 壓縮與解壓縮 Zip 壓縮檔教學與範例

介紹如何使用 PowerShell 指令稿,自動壓縮與解壓縮 Zip 壓縮檔,並提供常用的範例程式碼。

建立 Zip 壓縮檔

在第五版之後的 PowerShell 本身就有支援 Zip 壓縮檔的壓縮功能,我們可以利用 Compress-Archive 指令來壓縮檔案或目錄:

# 建立 Zip 壓縮檔
Compress-Archive -Path D:\MyFolder -DestinationPath D:\MyArchive.zip

這樣 PowerShell 就會將 D:\MyFolder 這整個目錄壓縮成 D:\MyArchive.zip 這個壓縮檔。

如果要分開指定多個檔案,可以用逗號分隔:

# 壓縮多個檔案
Compress-Archive -Path D:\MyFolder\MyFile.docx, D:\MyFolder\MyImg.jpg -DestinationPath D:\MyArchive.zip

更新壓縮檔

如果要更新壓縮檔,可以加上 -Update 參數:

# 更新壓縮檔
Compress-Archive -Path D:\MyFolder\*.txt -Update -DestinationPath D:\MyArchive.zip

執行之後,PowerShell 比對 D:\MyArchive.zipD:\MyFolder\*.txt 中的檔案,將有更新的檔案加入 D:\MyArchive.zip 壓縮檔中,而若有新增的檔案也會一併加入。

壓縮層級

壓縮層級會影響壓縮所耗費的時間,以及所產生的壓縮檔大小,我們可以使用 -CompressionLevel 參數來指定壓縮層級,可用的選項如下。

層級 說明
Fastest 使用最快速的方式壓縮,這種方式會產生較大的壓縮檔。
NoCompression 不要進行壓縮。
Optimal 最佳壓縮,產生的壓縮檔較小,需要的時間跟檔案大小有關。此方式為預設值。

若要減少壓縮所耗費的時間,可以使用 Fastest 的壓縮方式:

# 建立 Zip 壓縮檔
Compress-Archive -Path D:\MyFolder -CompressionLevel Fastest -DestinationPath D:\MyArchive.zip

直接指定檔案名稱

Compress-Archive 在使用 -Path 參數指定路徑時,某些萬用字元位有特殊意義(例如 * 代表任意的字元),如果想讓 PowerShell 直接根據字面上的文字解譯,不要有任何特殊意義,可以改用 -LiteralPath

# 不使用萬用字元
Compress-Archive -LiteralPath D:\奇怪的檔名.docx -DestinationPath D:\MyArchive.zip

通常在大部分的情況下使用 -Path 即可,當遇到比較奇怪的檔名時,才會需要用到 -LiteralPath

強制覆蓋舊檔

如果在建立壓縮檔時,目標的 Zip 壓縮檔已經存在的話,Compress-Archive 就會顯示錯誤訊息,如果想要強制讓它覆蓋舊的 Zip 壓縮檔的話,可以加上 -Force 參數:

# 強制建立 Zip 壓縮檔
Compress-Archive -Path D:\MyFolder -Force -DestinationPath D:\MyArchive.zip

解壓縮 Zip

若要在第五版之後的 PowerShell 中解壓縮 Zip 檔案,可以使用 Expand-Archive 指令:

# 解壓縮 Zip 檔
Expand-Archive -Path D:\MyArchive.Zip -DestinationPath D:\Output

執行之後就會將 D:\MyArchive.Zip 解壓縮至 D:\Output 目錄中,如果 D:\Output 目錄不存在的話,解壓縮時它會自動建立。

直接指定檔案名稱

若要 PowerShell 直接根據字面上的文字解譯檔案名稱,可以使用 -LiteralPath 參數來指定檔名:

# 不使用萬用字元
Expand-Archive -LiteralPath D:\奇怪的檔名.Zip -DestinationPath D:\Output

強制覆蓋舊檔

如果在解壓縮的目的目錄中,已經存在有壓縮檔中的檔案,則解壓縮時就會出錯,若要強制覆蓋舊檔,可以加上 -Force 參數:

# 強制解壓縮 Zip 檔
Expand-Archive -Path D:\MyArchive.Zip -Force -DestinationPath D:\Output

參考資料:StackOverflowSysadmins of the NorthStackOverflowStackOverflow

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago