送信フォルダ内の重複する添付ファイルをNo.08655
n'Guin さん 21/09/29 10:03
 
秀まるお様、みなさま

いつも大変お世話になっております。

同じ資料を、異なるタイミングで異なる方に送付することがたびたびあり、同じ添付
ファイルが、送信フォルダ内にたくさんあります。

メールフォルダは 15GB にも及んでおり、SSDの容量節約の意味でも、
同じ添付ファイルを削除したいと考えております。

X-Attach: は残しておいた方が、何が送信されたのかがわかるので、残しておきたい
ので、秀丸ファイラーや何らかのツールを用いて、添付ファイルを1つだけ残して削
除するという作戦に出たいのですが、よい知恵はないでしょうか。

よろしくお願いいたします。


[ ]
RE:08655 送信フォルダ内の重複する添付フNo.08656
Iranoan さん 21/09/29 10:31
 
n'Guin さんこんにちは、Iranoan です
> 同じ資料を、異なるタイミングで異なる方に送付することがたびたびあり、同じ添
>付ファイルが、送信フォルダ内にたくさんあります。
>
> メールフォルダは 15GB にも及んでおり、SSDの容量節約の意味でも、
> 同じ添付ファイルを削除したいと考えております。
秀丸メールの場合は、添付ファイルは受信時に専用のフォルダにデコード済みで保存
されています
よって同一ファイルの削除となると、メーラーの役割ではないと思います

同一ファイルを検索して、削除するツールは複数あるので、それらを使ったほうが良
いと思います
そういった専用ツールなら、ファイル名、ファイルの中身など条件を絞ることもでき
るので

[ ]
RE:08656 送信フォルダ内の重複する添付フNo.08657
秀まるお2 さん 21/09/29 11:29
 
 秀丸ファイラーのスクリプトでも出来るかもしれませんが、秀丸メールのマクロで
も出来そうな気がします。1回トライしてみます。

[ ]
RE:08657 送信フォルダ内の重複する添付フNo.08658
秀まるお2 さん 21/09/29 13:39
 
 一応、作ってみましたが、ファイルを削除する所までマクロで実行するのはちょっ
と怖いので、バッチファイル用のデータを生成するだけにしました。

 送信済みフォルダを選択して実行する形になります。

----------------------------------------------------------------------------
-----------------
    loaddll "tkinfo.dll";
    #n = dllfunc("SetSortMethod", 4);
    #n = dllfunc("SetViewArea", 5);
    #mailcount = dllfunc("MailCount");
    #mailindex = #mailcount - 1;
    $total = "";
    $duplist = "";
    disablebreak;
    #dupcount = 0;
    #nodupcount = 0;
    while( #mailindex > 0 ) {
        #n = dllfunc("SetMailIndex", #mailindex);
        #attachcount = dllfunc("CountCurrentHeader", "X-Attach");
        #attachindex = 0;
        while( #attachindex < #attachcount ) {
            $attach = dllfuncstr("CurrentHeader2", "X-Attach", #attachindex);
            $path = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "
\\" + $attach;
            #size = dllfunc("Bypass_GetFileSize", $path);
            if( #size >= 0 ) {
                $basename = midstr( $attach, strrstr($attach, "\\") + 1 );
                $item = "\x01" + $basename + "\x02" + hex(#size) + "\x03";
                if( strstr( $total, $item ) >= 0 ) {
                    //重複してる
                    $duplist = $duplist + "attrib -r \"" + $path + "\"\ndel
\"" + $path + "\"\n";
                    #dupcount = #dupcount + 1;
                } else {
                    $total = $total + $item;
                    #nodupcount = #nodupcount + 1;
                }
            }
            #attachindex = #attachindex + 1;
        }
        #mailindex = #mailindex - 1;
        if( keypressed != 0 ) {
            question "中断しますか?\n重複 = " + str(#dupcount) + "    非重
複 = " + str(#nodupcount);
            if( result == yes ) {
                break;
            }
        }
    }
    if( #dupcount == 0 ) {
        message "重複した添付ファイルはありませんでした。";
        endmacro;
    }
    #n = dllfunc("NewMail");
    gofiletop;
    beginsel;
    gofileend;
    delete;
    insert $duplist;
    message "削除しても大丈夫そうな添付ファイルをリストアップしました。中身
をバッチファイルに保存して実行すると実際に削除されます。";

[ ]
RE:08658 送信フォルダ内の重複する添付フNo.08659
n'Guin さん 21/09/29 15:23
 
秀 まるお 様

いつもながら、ていねいなサポートをありがとうございます。
念のために、テスト用のアカウントを使って、チェックをしてみました。

うまくいくようです。 削除されないファイルがひとつでてきたので確認したところ
下記の点のみ変更すればよいようでした。

おかげさまで、だいぶ SSD の容量を節約可能になりました。

心から感謝申し上げます。


>---------------------------------------------------------------------------
>------------------
>    loaddll "tkinfo.dll";
>    #n = dllfunc("SetSortMethod", 4);
>    #n = dllfunc("SetViewArea", 5);
>    #mailcount = dllfunc("MailCount");
>    #mailindex = #mailcount - 1;
>    $total = "";
>    $duplist = "";
>    disablebreak;
>    #dupcount = 0;
>    #nodupcount = 0;
>    while( #mailindex > 0 ) {
→     while( #mailindex >= 0 ) {

>        #n = dllfunc("SetMailIndex", #mailindex);
>        #attachcount = dllfunc("CountCurrentHeader", "X-Attach");
>        #attachindex = 0;
>        while( #attachindex < #attachcount ) {
>            $attach = dllfuncstr("CurrentHeader2", "X-Attach", #attachindex);
>            $path = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") +
>"\\" + $attach;
>            #size = dllfunc("Bypass_GetFileSize", $path);
>            if( #size >= 0 ) {
>                $basename = midstr( $attach, strrstr($attach, "\\") + 1 );
>                $item = "\x01" + $basename + "\x02" + hex(#size) + "\x03";
>                if( strstr( $total, $item ) >= 0 ) {
>                    //重複してる
>                    $duplist = $duplist + "attrib -r \"" + $path + "\"\ndel
> \"" + $path + "\"\n";
>                    #dupcount = #dupcount + 1;
>                } else {
>                    $total = $total + $item;
>                    #nodupcount = #nodupcount + 1;
>                }
>            }
>            #attachindex = #attachindex + 1;
>        }
>        #mailindex = #mailindex - 1;
>        if( keypressed != 0 ) {
>            question "中断しますか?\n重複 = " + str(#dupcount) + "    非重
>複 = " + str(#nodupcount);
>            if( result == yes ) {
>                break;
>            }
>        }
>    }
>    if( #dupcount == 0 ) {
>        message "重複した添付ファイルはありませんでした。";
>        endmacro;
>    }
>    #n = dllfunc("NewMail");
>    gofiletop;
>    beginsel;
>    gofileend;
>    delete;
>    insert $duplist;
>    message "削除しても大丈夫そうな添付ファイルをリストアップしました。中身
>をバッチファイルに保存して実行すると実際に削除されます。";

[ ]
RE:08659 送信フォルダ内の重複する添付フNo.08660
秀まるお2 さん 21/09/29 18:35
 
 バグ修正ありがとうございます。

 有用なマクロだと思うので、適当なタイミングでライブラリにもアップロードしよ
うと思います。

[ ]