cheshire-boy

アイテム・ファイル

【Expand-Archive】PowerShellで圧縮ファイル(ZIP)の解凍する方法

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

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

今回は、

【PowerShell で圧縮ファイルを解凍する方法】

についてご紹介します。

今回紹介する ”Expand-Archive” は PowerShell 5.0 で新たに追加された圧縮ファイル解凍用コマンドレットです。

あなたはファイルの圧縮解凍のためにフリーツールを入れていましたか?

v5.0 以降の PowerShell を導入していれば Windows の標準機能として圧縮や解凍が出来るので非常に便利ですよ!

ファイルの圧縮方法についてはこちら↓の記事をご参考ください。

 

スポンサーリンク

Expand-Archive で圧縮ファイルを解凍する

ファイル解凍を行うコマンドレットに

Expand-Archive

というものがあります。

【コマンドレット】

Expand-Archive

【オプション】

パターン1
-Path                      <圧縮ファイルのパス>
-DestinationPath      <解凍先ファイルパス>
-Force
-Confirm
-WhatIf

パターン2
-DestinationPath      <解凍先ファイルパス>
-LiteralPath              <圧縮ファイルの(リテラル)パス>
-Force
-Confirm
-WhatIf

【入力】

System.String

【出力】

System.IO.FileInfo
System.IO.DirectoryInfo

【エイリアス】

なし

 ファイルを解凍する

さっそく ZIP 圧縮されたファイルを解凍してみましょう。

コマンドレットの使い方は、

Expand-Archive -Path <圧縮ファイルパス> -DestinationPath <ファイル解凍先フォルダ>

というように ”-Path” オプションで圧縮されたファイル名を指定し ”-DestinationPath” オプションで圧縮ファイルの解凍先を指定します。

このように解凍したい圧縮ファイルと解凍先のフォルダ名を指定するだけで簡単に解凍することができます。

解凍先フォルダを指定せず解凍したら。。。

最初に実行したときは ”-DestinationPath” オプションで出力先を指定していました。

実際に解凍されたファイルは出力先フォルダに格納されていましたね。

では、”-DestinationPath” オプションを指定しない場合はどうなるのでしょうか。

実行結果を見てみると圧縮ファイル名と同名のフォルダが作成され、その中に解凍されたファイルが格納されています。

動き的にはエクスプローラで[右クリック]-[すべて展開(T)...]から展開した時と同じですね。

解凍先の同名ファイルを上書きする

”File1.txt” というテキストファイルが ”Test.zip” として圧縮されていた場合"exp"フォルダに解凍するには以下のコマンドを使うと説明しました。

 Expand-Archive -Path .\Test.zip -DestinationPath .\exp

では、もし ”exp” フォルダに既に”File1.txt”が存在していたらどうなるでしょうか。

実際にやってみると、

という具合にエラーが返ってきます。

”ファイル ’○○’ は既に存在するため、アーカイブ ファイル '△△.zip' の展開中にファイル '○○' を作成できませんでした。”

では、どうすればよいのかというとエラー文の中に対処法が丁寧に説明がしてあります。

アーカイブ ファイルを展開する際に、既存のディレクトリ '○○' の内容を上書きする場合は、-Force パラメーターを使用してください。

強制するという ”-Force” オプションをつけることで解決できるようです。

実際に試してみると、

とエラーは発生せず無事実行できました。

デフォルトで「上書きしますか?(Yes/No)」の確認をしてくれればいいのに...とは思いますが 笑
"Confirm" オプションをつけなければ確認はしてくれないそうです。

ファイル名の重複でエラーを出したくない場合は ”-Force” オプションを付けた方がよさそうですね。

”-LiteralPath” オプションでパスを指定する

解凍する圧縮ファイルの指定方法は ”-Path” オプションともう1つ ”-LiteralPath ”があります。

-LiteralPath” オプションを使用する場合には、リテラルパスでファイルパスを指定します。

リテラルパスとは...?

リテラルパスが使えます!と言いつつリテラルパスとは何かよくわかっていないので調べてみました。

-LiteralPath

Specifies the path to an archive file. Unlike the Path parameter, the value of LiteralPath is used exactly as it is typed. Wildcard characters are not supported. If the path includes escape characters, enclose each escape character in single quotation marks, to instruct Windows PowerShell not to interpret any characters as escape sequences.

Expand-Archive-Microsoft Developer Network/© 2017 Microsoft

要点をまとめると

  • Path パラメータとは異なり、LiteralPath の値は入力されたとおりに使用される
  • ワイルドカード文字はサポートされない
  • 各エスケープ文字は一重引用符で囲んでエスケープシーケンスとして解釈しないようにする

ということらしいです。

「リテラル(literal)」には「文字どおり」や「ありのまま」といった意味があるので、読んで字のごとく「文字どおり」のパス名を指定するときに使うようですね。

エスケープシーケンスでは一重引用符、つまりシングルクォーテーション(')を使うというのはリテラルパスに限った話ではないので特に気にしなくてよいでしょう。

リテラルパスではワイルドカードが使えない

ワイルドカードが使えないということなので試してみましょう。

解凍に使うファイルは以下の通りです。

では、”-Path” と ”-LiteralPath” を比較してみます。

"-Path" オプションの場合、

と問題なく使えました。

”-LiteralPath” の場合、

と説明通り”*”(ワイルドカード)部分をうまく読み取れずエラーになりました。

「リテラル(ありのまま)」なパスを指定しなければならないので、ワイルドカードは使わずに正確なファイルパスを指定することが必要です。

(リテラルパスの使い方は分かりましたが、使い所や使い分けはよくわかりません...)

まとめ

圧縮されたファイルを解凍したい場合は

Expand-Archive -Path <圧縮ファイル> -Destination <解凍先>

を使用する。

解凍したファイルで上書きするには、

-Force

リテラルパス (LiteralPath) を使用する場合は、

  • ワイルドカードは使わない
  • 正確なファイルパスを指定する

ことにに注意する。

スポンサーリンク

スポンサーリンク

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

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