fc2ブログ

t100のプログラミング脱出作戦

自分のプログラミング脳をプログラムにして、いつかプログラミングから脱出してやるぞっ!とか夢見ながら、日々プログラム作っていく 百野 貴博 の日記です!今は、屋号『百蔵。』として、Silverlight・WPFを追跡中です! (2007/09/30)
PowerShell でZipを回答する。(エクスプローラーの機能で)
というわけで(?) PowerShell でZipを回答するスクリプトを作ってみました。

極力、”追加コンポーネントをインストールせずに。”という条件で探してみたのですが
最終的には、Com経由で shell.application の機能を呼び出すという結論に至ってしまいました。
#C# 標準だとUnzipの機能ないんやね・・・。

サンプルコードは以下になります。


$sh = new-object -com shell.application
$targetfolder = $sh.namespace("I:\meke\dest\")
$zipFile = $sh.namespace("I:\meke\hoge.zip")

$zipFile.Items() | ForEach-Object {
   $targetfolder.copyhere($_.Path)
}



1行目で、ExplorerのComオブジェクトを生成しています。
2行目は、Zipの中身を解凍する解凍先フォルダを指定しています。
ここでは何故か、I:\meke\dest フォルダを指定しています。

3行目は、解凍元のZipファイルを指定しています。
とりあえず、フルパスべた書きにしています。

5行目は、Zipファイルの中に含まれているファイル一覧を取得して、ループの中で一つずつ取り出しています。


ExplorerのZip解凍をPoerShellから呼び出しているイメージです。

そのため、解凍先に同名のファイルがあった場合、上書きするかどうか確認のダイアログが出ます。
これ、オプションとかで何とかならないかな、、、

あと、処理としてもちょっと遅いようです。(一般に公開されているUnZipライブラリと比べると)


でもまぁ、何もインストールしなくても使えるということで、何かの際には使えるかも。


#続きに、試行錯誤の結果をメモとして残しています。
⇒続きを読む ヽ(´ー`)ノ
スポンサーサイト