[FAQ CENTER トップ]
[Powershell FAQ トップへ]



【Powershell】複数 zip ファイルを圧縮や解凍するサンプルコード



更新日:2022/03/13

このページではWindows 環境における Powershellでの複数ファイルの圧縮、解凍に関してサンプルで説明します。
別途フリーツールなどは導入せずに zip ファイルの圧縮、解凍が可能なためとても便利です。複数ファイルにも対応しています。

基本的には解凍には"Compress-Archive" , 圧縮には"Expand-Archive"コマンドレットを使用して処理することが可能です。
ただし圧縮の "Compress-Archive" は複数ファイル(Multiple files)を指定することが可能のようですが、解凍の"Expand-Archive"は複数のファイルを指定することはできないようです。(2021年10月現在)よって Get-ChildItem により複数の zip ファイル一覧を取得してから各ファイルを圧縮する仕組みを紹介します。

サンプルコード集

以下は Windows 10 環境におけるサンプルコードと実行結果です。

次のサンプルではPowershell Compress-Archive コマンドレットにより複数のファイルを一つのファイルに圧縮します。
-Pathで圧縮元を *(アスタリスク)で指定することにより複数ファイルを圧縮しています。


サンプルコード:

Compress-Archive -Path c:\temp100\*.txt -DestinationPath c:\temp100\test\archive.zip





次の例では逆にExpand-Archive コマンドレットにより一つのファイルを解凍します。-DestinationPathで解凍先のフォルダを指定します。

サンプルコード:

Expand-Archive -Path c:\temp100\test\archive.zip -DestinationPath c:\temp100\

複数のzip ファイルを一気に解凍する方法を紹介します。基本的にExpand-Archive は複数zipファイルでの解凍はできないため、Get-ChildItem によりファイル一覧を取得してから、各ファイルに対して解凍していきます。

次の例では"c:\temp100\test\" に複数の zip ファイルが設置されています。これらのzipファイルを解凍してc:\temp100 にファイルを保存しています。


サンプルコード:

Get-ChildItem c:\temp100\test\*.zip | Expand-Archive -DestinationPath c:\temp100


Expand-Archive で 同名のファイルが存在すると"既に存在するため、アーカイブ ファイル '(zip名)' の展開中にファイル '(ファイル名)' を作成できませんでした"というエラーが発生してしまいます。
同名ファイルが存在する場合には -Force オプションを使用します。

サンプルコード:

Get-ChildItem c:\temp100\test\*.zip | Expand-Archive -DestinationPath c:\temp100


実行結果:

ExpandArchiveHelper : ファイル 'C:\temp100\file1.txt' は既に存在するため、アーカイブ ファイル 'C:\temp100\test\a (1).zi
p' の展開中にファイル 'C:\temp100\file1.txt' を作成できませんでした。アーカイブ ファイルを展開する際に、既存のディレク
トリ 'C:\temp100\file1.txt' の内容を上書きする場合は、-Force パラメーターを使用してください。
発生場所 C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.p
sm1:397 文字:17
+ ... ExpandArchiveHelper $resolvedSourcePaths $resolvedDestina ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (C:\temp100\file1.txt:String) [Write-Error]、IOException
+ FullyQualifiedErrorId : ExpandArchiveFileExists,ExpandArchiveHelper

ExpandArchiveHelper : ファイル 'C:\temp100\file2.txt' は既に存在するため、アーカイブ ファイル 'C:\temp100\test\a (1).zi
p' の展開中にファイル 'C:\temp100\file2.txt' を作成できませんでした。アーカイブ ファイルを展開する際に、既存のディレク
トリ 'C:\temp100\file2.txt' の内容を上書きする場合は、-Force パラメーターを使用してください。
発生場所 C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.p
以下省略



圧縮時に同名ファイルが存在する場合は次のように -Force オプションを使用します。


サンプルコード:

Get-ChildItem c:\temp100\test\*.zip | Expand-Archive -Force -DestinationPath c:\temp100






[Powershell FAQ トップへ]
[FAQ CENTER トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018