Windows Script Host で unzip

概要

  • WSH オンリーで ZIP の展開ってできないかと思ってたけど、できた
  • Shell.Application を使うけどリファレンス見つからねえ
  • そんでなぜか VBScript だと実行できるものが JScript ではできねえ


WSH で ZIP 展開

Windows ではエクスプローラでごそごそ操作しないと ZIP が展開できない。コマンドラインから実行できる ZIP コマンドが組み込まれていればバッチ処理は楽だけど、そんなものはない。

複数の ZIP をひと手間で展開できたらいいなーと思って、MS の Script Repository を検索してたら、簡単に答えが見つかった。

Set sa = WScript.CreateObject("Shell.Application")

For Each arg In WScript.Arguments
	Set src = sa.NameSpace(arg)
	src.ParentFolder.CopyHere(src.Items)
Next

拡張子 vbs で保存した上記コードに、ZIP ファイル(複数可)をドラッグアンドドロップすると、同じフォルダに中身を展開する。

Shell.Application がキモだけど、使ったことがないのでぜんぜんわからん。msdn 探してもリファレンスがない。

いちおう個人による解説記事はあり。それを読むと、FileSystemObject とはまた別のファイルシステムの操作が Shell.Application を使うとできるっぽい印象。

なぜか JScript だとできない

そして謎なのが、上記コードを JScript に書き直しても実行できない。5行目の src.Items のところで、そんなプロパティはないよーみたいに言ってお断りされる。なんでやー。

COM コンポーネントとかタイプライブラリとかの実行基盤的なところに原因があるのかな。知らんけど。

参考文献

  1. Unzip files <http://gallery.technet.microsoft.com/ScriptCenter/en-us/cb72f2fb-979e-444a-a741-adf1fa553fd0>
  2. VBScript Language Reference <http://msdn.microsoft.com/en-us/library/d1wf56tt(v=VS.85).aspx>
  3. Shell <http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shell.htm>

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>