< インストールされている .NET Framework のバージョンをチェックするスクリプト - .NET Framework 4.0 対応版 | ZIP 作成処理を使ってみる。 >

August 24, 2010

ZIP 作成処理を試作中。

手慰みに、圧縮フォルダを作成するスクリプトを汎用性を考慮して改修中。

var zipmaker = function  ()
    {
        var _fileSystemObject = new ActiveXObject ('Scripting.FileSystemObject');
        var _shell = new ActiveXObject ('Shell.Application');
        var _wshShell = new ActiveXObject ('WScript.Shell')

        // ZIP ファイル作成
        var _createZipFile = function (path)
            {
                try
                {
                    // 既に存在する場合
                    if (_fileSystemObject.FileExists (path))
                    {
                        if (7 == _wshShell.Popup ("既に存在する書庫 "+ path + " に追加してよろしいですか?", 0, "ZIP ファイル作成", 32 + 4))
                            return null;
                    }
                    else
                    {
                        // 空の ZIP ファイルを作成する
                        var file = _fileSystemObject.CreateTextFile (path, false);
                        file.Write ("PK\5\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
                        file.Close ();
                    }
                    // Shell.Folder オブジェクトを返す
                    return _shell.NameSpace (path);
                }
                catch (e)
                {
                }
                return null;
            };

        // ファイルやフォルダを追加する
        var _addItem = function (zipFolder, zipPath, path)
            {
                // Shell.FolderItem を取得する
                var file = _shell.NameSpace (_fileSystemObject.GetParentFolderName (path)).ParseName (_fileSystemObject.GetFileName (path));
                // コピー
                zipFolder.CopyHere (file);
                // コピーが開始されるようにディレイを設ける
                WScript.Sleep (100);
                while (true)
                {
                    try
                    {
                        // 追記モードで開く
                        _fileSystemObject.OpenTextFile (zipPath, 8, false).Close ();
                        // 開ければコピー完了とみなす
                        return true;
                    }
                    catch (e2)
                    {
                    }
                    WScript.Sleep (10);
                }
            }

        // ZIP オブジェクト作成用のオブジェクトを返す
        return {

            // ZIP オブジェクト作成処理
            create: function (zipPath)
            {
                var path = _fileSystemObject.GetAbsolutePathName (zipPath)
                var _zipFolder = _createZipFile (path);

                if (_zipFolder)
                {
                    return {
                        path: path,
                        addItem: function (filespec)
                        {
                            return _addItem (_zipFolder, zipPath, filespec);
                        }
                    };
                }
                return null;
            }
        };
    } ();

使い方はこうかなー。

var zip = zipmaker.create ("c:\\test.zip");
if (zip)
{
    zip.addItem ("c:\\somefolder");
    zip.addItem ("c:\\otherfolder\\somefile.txt");
    WScript.echo (zip.path + " を作成しました。");
}

トラックバック

このエントリーにトラックバック:
http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/2540

コメント

コメントする

※ コメントスパム対策のため、コメント本文はおはよう、こんにちわ、こんばんわのいずれかより始めるようにしてください。

name:
email:

※ 必要ですが、表示しません。

url:
情報を保存する ?