Windows XP以降の「圧縮フォルダ」機能を使って、zip圧縮スクリプトを実現すると、こんな感じになるらしいです。ヘッダをテキスト書きするとか、割と無理を通しているかも?
Windows標準(XP以降)の機能を使って、ファイルをzip圧縮する †
[追記] 下記のCopyHereメソッドは非同期処理らしく、圧縮に時間がかかるとcscriptプロセスが先に終了してしまうため、正常に圧縮ファイルが生成できない。このスクリプトは使えない。没!
<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>
参考 †