2015年2月3日火曜日

Windowsで、OS標準機能のzip圧縮/解凍を使用する(PowerShell v5編)

こんにちは。近藤です。



Windowsでよく使う圧縮ファイル形式と言ったら、zipですよね。
日本では、WindowsがコンシューマPC用のOSとして普及する前、PC-9801やX68000が全盛だった頃は、日本独自のlzhファイルがよく使われていました…って、既に20年も前なのですね。

さて、このzipファイルですが、Windows OSの標準機能で、圧縮や解凍(およびフォルダーとして扱うこと)ができます。
圧縮したいファイル/フォルダーを選択して、マウス右クリック-[送る]-[圧縮(zip形式)フォルダー]と選択すると圧縮できますし、zipファイルを選択して、マウス右クリック-[すべて展開]とすると、解凍できます(OSの拡張子設定に依りますが)。
さて、この圧縮/解凍、マウスからは上記のように操作できますが、コマンドラインから操作するにはどうしたらよいでしょうか?

これまでは、通常のコマンドラインでは操作ができないので、

  • WSHでzipファイルの操作を作成し、バッチで呼び出し
  • PowerShell v4追加されたzipファイルを操作するライブラリを使用して、同上

ということをする必要がありました。
(例は、ネットで探すとすぐに見つかるので、ここでは割愛します)

WSH版の記事を追加しました。
WSHを使用したスクリプトは、
をご覧ください。

2015年2月時点ではまだ正式リリースされていませんが(Preview版)、Windows 10にも標準搭載されるPowerShell v5では、新たにコマンドが追加されます。


圧縮コマンドのヘルプ表示(一部):
名前
    Compress-Archive

構文
    Compress-Archive [-Path] <string[]> [-DestinationPath] <string> [-CompressionLevel <st
    ring> {Optimal | NoCompression | Fastest}] [-WhatIf] [-Confirm]  [<CommonParameters>]

~中略~

エイリアス
    なし


解凍コマンドのヘルプ表示(一部):
名前
    Expand-Archive

構文
    Expand-Archive [-Path] <string> [-DestinationPath] <string> [-Force] [-WhatIf] [-Confi
    rm]  [<CommonParameters>]

~中略~

エイリアス
    なし

PowerShellをコマンドラインから実行するには、先頭に”powershell”と付ければ大丈夫です。
C:\>powershell compress-archive c:\temp\test.txt c:\temp\test.zip

このような感じで、簡単にコマンドからもzipファイルを扱えるようになります。
さて、ここまでのコマンド例を見てきて、「パスワード指定の引数が無い」とお気付きになった方もいらっしゃると思います。
そうなのです。圧縮時の暗号化の引数が無いのです。
これは、コマンドだから使用できないわけではなく、Windowsの圧縮フォルダーにそもそも機能が存在していないのです(注:Windows XPには機能がありましたが、それ以降削除されました)。
マウス右クリック-[送る]-[圧縮(zip形式)フォルダー]と選択したときも、パスワードを与えることはできませんし、WSHでもPowerShell v4のライブラリ使用でも、同様にパスワードは設定できません。
解凍時はどうかというと、Windowsエクスプローラではダイアログボックスでパスワードを指定できますが、これをコマンドから与えることもできません。
パスワードで暗号化されたzipファイルが来た場合、

  • WSHで実行する場合…パスワードを入力するダイアログボックスが表示
  • PowerShell v5で実行する場合…エラー

となります。
また、zipファイルを作成したアーカイバによっては、Windows OSの標準機能では解凍できないファイルになっている場合があります。
なので、zipファイルを扱う場合は、現状でもアーカイバが必要ですね。

ちなみに、
上に出てきたlzhファイルは、Windows 7以降ではWindows OSの標準機能で解凍(および読み込み専用のフォルダーとして扱うことが)できるようになっています(それより前では、拡張機能(Windows XPでは、確か「正規 Windows 推奨プログラム」でWindowsアカウントのアクティベーションを行うとダウンロードできた気がします)によって解凍できるようになりました)。すべてのlzhファイルを解凍できるわけではありませんし、Windowsエクスプローラからの操作に限るのですが、便利になりました。


0 件のコメント:

コメントを投稿