|
Windows XP以降の「圧縮フォルダ」機能を使って、zip圧縮スクリプトを実現すると、こんな感じになるらしいです。ヘッダをテキスト書きするとか、割と無理を通しているかも? *** Windows標準(XP以降)の機能を使って、ファイルをzip圧縮する [#jbbc47bb] *** %%Windows標準(XP以降)の機能を使って、ファイルをzip圧縮する%% [#jbbc47bb] [追記] 下記のCopyHereメソッドは非同期処理らしく、圧縮に時間がかかるとcscriptプロセスが先に終了してしまうため、正常に圧縮ファイルが生成できない。このスクリプトは使えない。''没!'' #ref(zip.wsf); <job id="zip"> <script language="JScript"> // // Windows標準(XP以降)の機能を使って、ファイルをzip圧縮する。 // 第1引数のフォルダ名・ファイル名からZIPファイル名を生成する。 // 引数に指定されたフォルダ・ファイルが存在しない場合も、エラーにせず処理続行。 // // @author Jomora ( kazuhiko@jomura.net http://jomura.net/ ) // @version 2011/05/23 // 以降、変更の必要なし var fso = new ActiveXObject("Scripting.FileSystemObject"); var shell = WScript.CreateObject("Shell.Application"); if (0 == WScript.Arguments.length) { WScript.Echo("引数を指定するか、何かファイルをドラッグ&ドロップしてみて"); WScript.Quit(); } var args = new Array(); for (var i = 0; i < WScript.Arguments.length; i++) { args[i] = fso.GetAbsolutePathName(WScript.Arguments(i)); } // 作成するZIPファイル var zipfile = fso.BuildPath(fso.GetParentFolderName(args[0]), fso.GetBaseName(args[0]) + ".zip"); // ファイルがなければZIPファイルのひな形を作成 if (!fso.FileExists(zipfile)) { var nf = fso.CreateTextFile(zipfile, false); nf.Write("PK\5\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); nf.Close(); } // ZIPファイルのオブジェクトを取得する var zip = shell.NameSpace(zipfile); // アーカイブにファイルを追加 for (var i = 0; i < args.length; i++) { zip.CopyHere(args[i]); } // 圧縮が完了するのを待つ? WScript.Sleep(500); </script> </job> *** 参考 [#le8c78e6] - ZIP.CMD : http://www.vector.co.jp/soft/dl/winnt/util/se426770.html