Last-modified: 2011-06-21 (火) 15:14:08 (4075d)

 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>

参考


添付ファイル: filezip.wsf 5479件 [詳細]

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