(発言者削除)No.44170
秀まるお2 さん 13/02/28 10:07
 


[ ]
RE:44170 圧縮マクロ attachcompress-7zipNo.44172
ZZPOP さん 13/02/28 10:22
 
迅速なお返事に心から御礼と感謝申し上げます。
本当にありがとうございました。

ご対応により
2重圧縮は解決しました。

あと、欲いって大変恐縮ですが

例)
添付に、
"aaa.zip" と "bbb.xls" 複数ファイルの場合
マクロ動作は

"aaa.zipなど.zip"

となるようですが


aaa.zip = 圧縮はスルー
bbb.xls  =  bbb.xls.zip (これだけ圧縮)

は可能でしょうか


こうなれば、完璧です。

理由は
添付ファイル ファイル名 + (拡張子[ .xls 等]) で検索したい用途が多いためです。

お忙しい中いろいろとご注文すいません。

[ ]
RE:44172 圧縮マクロ attachcompress-7zipNo.44181
秀まるお2 さん 13/02/28 13:54
 
以下のマクロでどうでしょうか。一応テストしたので大丈夫だと思います。

// 添付ファイル圧縮-7zip-SemiSeparate.mac by 斉藤秀夫
// 2012.02.24
// 2012.04.02 秀丸メール本体ウィンドウ上で実行してうまくいかないバグ修正。
// 2013.02.28 既に.zip単独ファイルになってる物は圧縮しない。
// 2013.02.28 「.zip」とその他拡張子の添付ファイルが混ざってる場合は、.zipを
除外してその他のファイルだけ1つに圧縮する。

// 7-zipのダウンロード先:  http://sevenzip.sourceforge.jp/


    //パスワード付きにする場合はここにパスワードを設定しておく。
    //パスワード無しにするなら""を代入する。
    //パスワードを毎回入力したい場合は $password = "*"としておく。
    //パスワードの中には空白は入れないでください。
    //
    // 例:
    //  $password = "";         ... パスワード無し
    //  $password = "pass";     ... パスワードを"pass"にする。
    //  $password = "*";        ... パスワードを毎回入力する。
    $password = "*";

    loaddll "tkinfo.dll";
    $7zip = "C:\\Program files\\7-Zip\\7z.exe";
    if( ! existfile( $7zip ) ) {
        $7zip = "C:\\Program files (x86)\\7-Zip\\7z.exe";
        if( ! existfile( $7zip ) ) {
            message "7-Zipのプログラム用ファイルが見つかりません。7-Zipをイ
ンストールしてください。\n\n" +
                    "7-Zipは、C:\\Program files\\7-Zip またはC:\\Program fil
es (x86)\\7-Zip にインストールされてる必要があります。";
            endmacro;
        }
    }
    openreg "CURRENTUSER", "Software\\Hidemaruo\\TuruKame\\Config";
    $home = getregstr( "HomeDir" );
    closereg;
    $account = dllfuncstr("CurrentAccount");
    if( dllfunc("IsTuruKameMain") ) {
        question "現在選択しているメール(複数も可)の添付ファイルを圧縮しま
す。よろしいですか?";
        if( result == yes ) goto CompressAll;
        endmacro;
    }

    if( dllfunc("MailType") == 3 ) {
        message "受信したメールの添付ファイル・圧縮は、秀丸メール本体上でし
か実行できません。";
        endmacro;
    }
    if( readonly ) {
        #n = dllfunc("EnableEdit");
    }
    #cAttach = 0;
    while(1) {
        $aAttach[#cAttach] = dllfuncstr("CurrentHeader2", "X-Attach"
                                       , #cAttach );
        if( $aAttach[#cAttach] == "" ) break;
        #cAttach = #cAttach + 1;
    }
    if( #cAttach == 0 ) {
        message "添付ファイルは1つもありません。";
        endmacro;
    }
    if( #cAttach == 1 ) {
        if( rightstr( $aAttach[0], 4 ) == ".zip" ) {
            message "添付ファイルは既に圧縮されてます。";
            endmacro;
        }
        $dest = $aAttach[0] + ".zip";
    } else {
        $dest = $aAttach[0] + "など.zip";
    }
    while(1) {
        #n = strstr( $dest, "\\" );
        if( #n < 0 ) {
            break;
        }
        $dest = midstr( $dest, #n + 1, 256 );
    }
    $dest = input( "圧縮して作成するファイル名は?", $dest );
    if( $dest == "" ) {
        endmacro;
    }
    if( $password == "*" ) {
        $password = input( "パスワードは?" );
        if( $password == "" ) {
            question "パスワード無しにしますか?";
            if( result != yes ) {
                endmacro;
            }
        }
    }
    if( $password != "" ) {
        $7zip = $7zip + " -p" + $password;
    }
    $tmp = getenv("temp");
    if( $tmp == "" ) {
        $tmp = getenv("tmp");
    }
    if( rightstr($tmp, 1) != "\\" ) {
        $tmp = $tmp + "\\";
    }
    $dest = $tmp + $dest;
    #n = dllfunc("Bypass_SetFileAttributes", $dest, 0x00000020);
    #n = dllfunc("Bypass_DeleteFile", $dest);
    //添付ファイル圧縮-7zip.macで修正。
    //$cmd = "-j \"" + $dest + "\"";
    $cmd = "a \"" + $dest + "\"";
    #i = 0;
    while( #i < #cAttach ) {
        $cmd = $cmd + " \"" + $home + $account + "\\" + $aAttach[#i] + "\"";
        #i = #i + 1;
    }
    //添付ファイル圧縮-7zip.macで修正。
    //#n = dllfunc("Zip", hidemaruhandle(0), $cmd);
    runsync2 $7zip + " " + $cmd;
    if( !result ) {
        message "7zipの実行に失敗しました。";
        endmacro;
    }
    #n = dllfunc( "AddAttach", $dest );
    // ファイルの削除
    #n = dllfunc("Bypass_DeleteFile", $dest);
    #i = 0;
    while( #i < #cAttach ) {
        #n = dllfunc( "UndoAttach", $aAttach[#i] );
        #i = #i + 1;
    }
    endmacro;


// 受信したメールの添付ファイルを圧縮する処理。
CompressAll:
    #n = dllfunc("LockSelection");
    #cCompressed = 0;
    #cCompressedMail = 0;
    while( dllfunc("EnumSelection", 1) != 0 ) {
        if( dllfunc("CountCurrentHeader", "X-Attach") != 0 ) {
            //添付ファイル圧縮-7zip.macで修正。
            //$cmd = "-j \"" + $pathLzh + "\"";
            $cmd = "";      //とりあえず
            #targetcount = 0;
            #i = 0;
            $base = "";
            while(1) {
                $attach = dllfuncstr("CurrentHeader2", "X-Attach", #i);
                if( $attach == "" ) {
                    break;
                }
                if( dllfuncstr("ToLower", rightstr( $attach, 4 )) == ".zip" ) {
                    //スキップ
                } else {
                    if( $base == "" ) {
                        $base = $attach;
                    }
                    $path[#targetcount] = $home + $account + "\\" + $attach;
                    $cmd = $cmd + " \"" + $path[#targetcount] + "\"";
                    #targetindex[#targetcount] = #i;
                    #targetcount = #targetcount + 1;
                    #cCompressed = #cCompressed + 1;
                }
                #i = #i + 1;
            }
            if( #targetcount != 0 ) {
                $path = $home + $account + "\\" + $base;
                if( #targetcount == 1 ) {
                    $lzh = $base + ".zip";
                    $pathLzh = $path + ".zip";
                } else {
                    $lzh = $base + "など.zip";
                    $pathLzh = $path + "など.zip";
                }
                #cCompressedMail = #cCompressedMail + 1;

                //添付ファイル圧縮-7zip.macで修正。
                //#n = dllfunc("Zip", hidemaruhandle(0), $cmd);
                $cmd = "a \"" + $pathLzh + "\"" + $cmd;
                runsync2 $7zip + " " + $cmd;
                if( !result ) {
                    message "7zipの実行に失敗しました。マクロを中断します。";
                    endmacro;
                }
                if( ! existfile( $pathLzh ) ) {
                    message "Zip圧縮に失敗しました。(圧縮によって生成された
はずのファイルがありません。)";
                } else {
                    #n = dllfunc("BeginEditMail");
                    #n = dllfunc("Bypass_SetFileAttributes", $pathLzh, 0x000
00021);     //ReadOnly属性に設定。
                    #i = #targetcount - 1;
                    while( #i >= 0 ) {
                        #n = dllfunc("Bypass_SetFileAttributes", $path[#i],
0x00000020);        // ReadOnlyを解除。
                        #n = dllfunc("Bypass_DeleteFile", $path[#i]);
                        #n = dllfunc("DeleteHeader2", "X-Attach", #targetind
ex[#i] );
                        #i = #i - 1;
                    }
                    #n = dllfunc("AddHeader", "X-Attach", $lzh);
                    #n = dllfunc("SaveEditMail", 0);
                }
            }
        }
    }
    #n = dllfunc("UnlockSelection", 1);
    if( #cCompressedMail == 0 ) {
        message "圧縮した添付ファイルはありませんでした。";
    } else {
        message str(#cCompressedMail) + "通のメールの、 " + str(#cCompresse
d) + "個の添付ファイルを圧縮しました。";
    }
    endmacro;

[ ]
RE:44181 圧縮マクロ attachcompress-7zipNo.44182
ZZPOP さん 13/02/28 14:50
 
送受信・確認させていただきました
完璧です!!!ありがとうございます!!!
おかげさまで
これで
秀丸メールの添付ファイル検索が完璧にできます!
6年くらい愛用させていただいてるので
本当にうれしいです!!ありがとうございました!!!


>以下のマクロでどうでしょうか。一応テストしたので大丈夫だと思います。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>    endmacro;

[ ]
RE:44182 圧縮マクロ attachcompress-7zipNo.44183
秀まるお2 さん 13/02/28 15:04
 
 欲を言えば、圧縮するzipファイルのファイル名に、圧縮対象のファイル名す
べて含めるようにすることも可能ではあります。

 例:    aaa.txt
         bbb.txt
         ccc.txt

 の場合、現状では「aaa.txtなど.zip」となるのを、

  aaa.txt bbb.txt ccc.txt.zip

 にするとか…。ファイル名の長さ制限は必要なので、あんまり長くなった場合
は途中でカットになりますけども。

 ご要望があればこれまた対応出来るかと思います。

[ ]