概要
- 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 コンポーネントとかタイプライブラリとかの実行基盤的なところに原因があるのかな。知らんけど。
参考文献
- Unzip files <http://gallery.technet.microsoft.com/ScriptCenter/en-us/cb72f2fb-979e-444a-a741-adf1fa553fd0>
- VBScript Language Reference <http://msdn.microsoft.com/en-us/library/d1wf56tt(v=VS.85).aspx>
- Shell <http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/shell.htm>