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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS