|
とりあえず、添付ファイル用フォルダを「受信添付YYYY」のようなフォルダ配
下に分けるマクロを作りました。
ちなみにですが、「受信添付_YYYY」のように「_」を入れると秀丸メールの動
作がおかしくなります。「受信添付YYYY」のように、受信添付の後は数字だけじ
ゃないとダメです。
-----------------------------添付ファイルフォルダ整理.mac---------------------
loaddll "tkinfo.dll";
#n = dllfunc("SelectedMailCount");
if( #n == 0 ) {
message "メールを選択してから実行してください。";
}
$accountpath = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount")+"\\";
#removedirerror = 0;
#n = dllfunc("LockSelection");
while(1) {
#n = dllfunc("EnumSelection", 1);
if( #n == 0 ) {
break;
}
#attachcount = dllfunc("CountCurrentHeader", "X-Attach:");
if( #attachcount != 0 ) {
$date = dllfuncstr("CurrentHeader","Date");
if( $date == "" ) {
continue;
}
$year = dllfuncstr("FormatDate", $date, "YYYY");
if( strlen($year) != 4 ) {
continue;
}
$folder = $accountpath + "受信添付" + $year;
if( !existfile( $folder ) ) {
#n = dllfunc("Bypass_CreateDirectory", $folder);
}
if( (existfile( $folder, 1 ) & 0x10) == 0 ) {
message "フォルダ作成エラー1 " + $folder;
endmacro;
}
$folder2base = dllfuncstr("FormatDate", $date, "MMDD");
#foldernum = 0;
$folder2 = $folder + "\\" + $folder2base;
while( existfile( $folder2 ) ) {
#foldernum = #foldernum + 1;
$folder2 = $folder + "\\" + $folder2base + "_"
+ str(#foldernum);
}
#n = dllfunc("Bypass_CreateDirectory", $folder2);
if( (existfile( $folder2, 1 ) & 0x10) == 0 ) {
message "フォルダ作成エラー2 " + $folder2;
endmacro;
}
#updatecount = 0;
$removedir = "";
#i = 0;
while( #i < #attachcount ) {
$attach = dllfuncstr("CurrentHeader2", "X-Attach:", #i);
$src = $accountpath + $attach;
if( leftstr( $attach, 9 ) != "受信添付\\" ) {
// 「受信添付XXXX\...」になってる場合は対象外。
} else if( !existfile( $src ) ) {
//ファイルが存在してない場合も対象外。
//message "ファイルが存在してない";
} else {
#x = strrstr( $src, "\\" );
$dest = $folder2 + midstr( $src, #x );
if( dllfunc("Bypass_MoveFile", $src, $dest) == 0 ) {
#error = dllfunc("Bypass_GetLastError");
message "ファイル移動に失敗。\n"
+ "移動元 = " + $src + "\n"
+ "移動先 = " + $dest + "\n"
+ "エラーコード = " + str(#error);
} else {
#newattachindex[#updatecount] = #i;
$newattach[#updatecount] = midstr( $dest
, strlen($accountpath) );
#updatecount = #updatecount + 1;
$removedir = leftstr( $src, #x );
}
}
#i = #i + 1;
}
if( #updatecount != 0 ) {
#i = 0;
#n = dllfunc("BeginEditMail");
while( #i < #updatecount ) {
#n = dllfunc("SetHeader2", "X-Attach:", $newattach[#i]
, #newattachindex[#i]);
#i = #i + 1;
}
#n = dllfunc("SaveEditMail", 0, 0);
if( $removedir != "" ) {
#n = dllfunc("Bypass_RemoveDirectory", $removedir);
if( #n == 0 ) {
#error = dllfunc("Bypass_GetLastError");
//message "RemoveDirectory failed\n"
// + "folder=" + $removedir;
#removedirerror = 1;
}
}
}
}
}
#n = dllfunc("UnlockSelection", 1);
if( #removedirerror != 0 ) {
message "移動元のフォルダの残骸が残っています。"
+ "「全般的な設定・上級者向け・デバッグ」の"
+ "「リンク切れ添付ファイル/HTMLメールの検索」"
+ "で残骸整理してください。";
}
|
|