cheshire-boy

アイテム・ファイル

【Compress-Archive】PowerShellでファイルやフォルダをZIP圧縮する方法

投稿日:2016年11月13日 更新日:

こんにちは。チェシャ男です。(-皿-)

今回は、

【PowerShell でファイルやフォルダをZIP圧縮する方法】

についてご紹介します。

今回紹介する ”Compress-Archive” コマンドレットは PowerShell 5.0 で新たに追加されたものです。

Windows で圧縮といえばお馴染みの「ZIPファイル」を作成することができます。圧縮だけでなく書庫化して複数のファイルをひとまとめにできるのも魅力的ですね。

PowerShell 5.0 以降ではフリーソフトを使用しなくても圧縮することができるので”Lhaplus” などをインストールする必要もありませんね。

圧縮ファイルの解凍方法についてはこちら↓をご覧ください。

 

スポンサーリンク

Compress-Archive でファイルを圧縮する

ファイル圧縮を行うコマンドレットに

Compress-Archive

というものがあります。

【コマンドレット】

Compress-Archive

【オプション】

パターン1
-Path                      <圧縮元ファイルパス>
-DestinationPath      <圧縮ファイル出力先>
-CompressionLevel   <圧縮レベル>
-Update
-Confirm
-WhatIf

パターン2
-DestinationPath      <圧縮ファイル出力先>
-LiteralPath              <圧縮元ファイル(リテラル)パス>
-CompressionLevel   <圧縮レベル>
-Update
-Confirm
-WhatIf

【入力】

System.String[]

【出力】

 System.IO.FileInfo

【エイリアス】

なし

ファイルを圧縮する

さっそく圧縮してみましょう。まずは単純に1つのファイルを圧縮してみます。

Compress-Archive -Path <ファイルパス> -DestinationPath <出力先.zip>

というように ”-Path” オプションで圧縮元のファイル名を指定し ”-DestinationPath” オプションで圧縮先のファイル名を指定しましょう。

圧縮元と圧縮先を指定するだけなので分かりやすい使い方ですね。

”-Path” で圧縮元を指定するだけではなくパイプラインで渡すこともできます。

実行結果を見ていただけるとわかると思いますが、パイプするファイル名を””(ダブルクォーテーション)等で囲んでいなければ失敗するようなので注意が必要ですね。

複数のファイルを圧縮する

先ほどは1つのファイルを圧縮したので今度は複数のファイルをまとめて圧縮してみましょう。

方法はいくつかありますが今回はわかりやすいように連番になっているファイルを”*(ワイルドカード)”で指定します。

ZIPファイルの中身も確認してみると、

zipの中身-チェシャわら
zipの中身-チェシャわら

となっているので問題なさそうですね。

"-Update" オプションで ZIP にファイルを追加する

すでに圧縮してまとめてしまった ZIP ファイルに対しては ”-Update” オプションを使ってファイルを追加することができます。

もしあなたがバックアップとしてZIP圧縮を使用しているとしたら、かなり便利ではありませんか!

Compress-Archive -Path <ファイルパス> -DestinationPath <出力先.zip> -Update

以下は実行例です。

エクスプローラから実際にZIPファイルの中身を覗いてみましょう。

zipにファイル追加-チェシャわら
zipにファイル追加-チェシャわら

ご覧のようにファイルが追加されていますね。

フォルダを圧縮する

ファイル圧縮と同様にフォルダの圧縮も可能です。

圧縮方法もファイル圧縮時と同様に ”-Path” オプションで圧縮元を指定し ”-DestinationPath” オプションで圧縮先を指定します。

ZIP ファイルの中身も確認してみましょう。下図のように ZIP ファイルの中にファイルが圧縮格納されていることがわかります。

フォルダを圧縮-チェシャわら
フォルダを圧縮-チェシャわら

ちなみに図を見ていただくとわかるように、フォルダを圧縮した場合は

.. \ 圧縮先フォルダ(DestinationPath) \ 圧縮したフォルダ名(Path) \ フォルダの中身

という構造になることに注意してください。

"-CompressionLevel" で指定する圧縮レベル

-CompressionLevel" オプションでは、圧縮ファイルを作成する時どのくらいの圧縮力・圧縮スピードで圧縮するか決めることができます。

高速圧縮を使用すると圧縮ファイルを作成するための時間が短く済みますがファイルサイズが大きくなってしまうという欠点もあります

逆に最適な圧縮率で圧縮させる場合は圧縮元のファイルサイズによっては長く時間がかかる場合があります。

このオプションで設定できる値は次の通りです。

  • Fastest:
    ->処理時間を短縮するために利用可能な最速となる圧縮率を使用します。
  • NoCompression:
    ->圧縮しないで書庫化だけ行う。
  • Optimal:
    ->最適な圧縮率を適用する。処理時間はファイルサイズに依存する。(デフォルト)

効率をも考えながら状況によって使い分ける方がよさそうですね。

単にファイルのアーカイブや整理として圧縮なしで使うという方法もありだと思います。

Compress-Archive 使用時の注意点

ここまで、”Compress-Archive” コマンドレットの使用方法を紹介しましたが Microsoft には以下のように説明があります。

DESCRIPTION

The Compress-Archive cmdlet creates a zipped (or compressed) archive file from one or more specified files or folders. An archive file allows multiple files to be packaged, and optionally compressed, into a single zipped file for easier distribution and storage. An archive file can be compressed by using the compression algorithm specified by the CompressionLevel parameter.

Because Compress-Archive relies upon the Microsoft .NET Framework API System.IO.Compression.ZipArchive to compress files, the maximum file size that you can compress by using Compress-Archive is currently 2 GB. This is a limitation of the underlying API.

Compress Archive-Microsoft Developer Network/© 2017 Microsoft

大事なところをザックリ訳すと、現在コマンドレットで圧縮可能な最大サイズは2GBまでとなっているようです。

また、環境によっては日本語のファイル名を圧縮しようとすると文字化けする場合もあります。

( .Net Framework 4.5 以降を導入している場合は直接フレームワークの機能から圧縮することもできるみたいですね)

 まとめ

ファイルやフォルダを圧縮したい場合は

Compress-Archive -Path <圧縮元> -Destination <圧縮先>

を使用する。

圧縮済みのZIPファイルにファイルを追加する場合は、

-Update

圧縮率を変更したい場合は、

-CompressLevel

を使用する。

スポンサーリンク

スポンサーリンク

-アイテム・ファイル
-, , , ,

Copyright© 【チェシャわら】PowerShellとは、から学ぶ入門者の教科書-脱コマンドプロンプト- , 2017 AllRights Reserved Powered by micata2.