| |
おはようございます。お世話になります。
添付ファイルをsubjectの文字を取得して保存するマクロで時折文字化けが発生するのを抑制したいです。
subjectはオリジナルでは無く私が直接打ち換えた日本語です。
文字化けするときとしないときの条件が見いだせたいないです。
うちのAI君、私の質問が悪いのか解決に至らないでエラーばかり繰り返すのでここで質問いたしました。ご教示のほどお願いいたします。
loaddll "TKInfo.dll";
// 保存先
$SaveDir = "C:\\Users\\user\\Desktop";
// サブジェクト取得
$Subject = dllfuncstr("CurrentHeader", "Subject");
if ($Subject == "") {
message "サブジェクトが取得できません。";
endmacro;
}
// Windows禁止文字削除
call SanitizeFileName $Subject;
$Subject = $$return;
// 添付ファイル数取得
#cnt = dllfunc("CountCurrentHeader", "X-Attach");
if (#cnt < 1) {
message "添付ファイルがありません。";
endmacro;
}
##i = 0;
while (##i < #cnt) {
// 添付ファイルの相対パス
$AttachFile = dllfuncstr("CurrentHeader2", "X-Attach", ##i);
// フルパス
$FullPath = dllfuncstr("HomeDir") + dllfuncstr("CurrentAccount") + "\\" + $AttachFile;
// 拡張子取得
call GetExt $AttachFile;
$Ext = $$return;
// 保存名作成
if (##i == 0) {
$NewName = $Subject + "月日" + $Ext;
} else {
$NewName = $Subject + "(" + str(##i+1) + ")月日" + $Ext;
}
// 保存先フルパス
$SavePath = $SaveDir + "\\" + $NewName;
// DLL経由でコピー
#ret = dllfunc("Bypass_CopyFile", $FullPath, $SavePath);
if (#ret == 0) {
message "保存に失敗:" + $SavePath;
} else {
// ★ここに入れる
run "attrib -r \"" + $SavePath + "\"";
}
##i = ##i + 1;
}
message "添付ファイルを保存しました。";
freedll;
endmacro;
//--------------------------------------
// 拡張子取得
//--------------------------------------
GetExt:
{
$f = $$1;
#p = strstr($f, ".");
if (#p < 0) {
return "";
}
#len = strlen($f);
return rightstr($f, #len - #p);
}
//--------------------------------------
// Windows禁止文字削除(安全版)
//--------------------------------------
SanitizeFileName:
{
$s = $$1;
// Windows禁止文字(ダブルクォーテーションは別扱い)
$bad = "\\/:*?<>|";
#i = 0;
#len = strlen($s);
$r = "";
while (#i < #len) {
$c = midstr($s, #i, 1);
// $bad に含まれず、かつダブルクォーテーションでもない
if (strstr($bad, $c) < 0 && $c != "\"") {
$r = $r + $c;
}
#i = #i + 1;
}
return $r;
}
|
|