Outlookでメールをmsgファイルに保存することがよくあります。
その時、以下のようなことをよく実施します。
①msgファイルに保存
<例> メール1.msg
②msgファイルを開き
③受信日時を選択してコピー
④ファイル名の先頭につける
20230130 (月) 2103_メール1.msg
上記の②~④の動作を自動化するスクリプトを作ってみました。
日時は曜日は入らず「yyyymmdd_hhmmss_」が付きます。
JavaScriptにも慣れようとJScript版も作っています。
普通のメールの場合は受信日時を使用します。会議・予定の場合は開始日時を使用します。
■使い方
①以下のソースをファイルに保存。VBScript、JScriptどちらでも。
②あとはmsgファイルをスクリプトファイルにドラッグ&ドロップ(複数ファイル可)
■VBScript版 「msgファイル名に日時付与.vbs」で保存
Set fso = CreateObject("Scripting.FileSystemObject") Set oOutlook = CreateObject("Outlook.Application") ' パラメータ取得 Set args = WScript.Arguments ' [ パラメータにループ ] For Each path In args ' 拡張子を取得 ext = fso.GetExtensionName(path) ' 拡張子がmsgファイルなら以下処理を実施する If ext = "msg" Then ' msgファイルを開く Set msg = oOutlook.CreateItemFromTemplate(path) ' 受信日時取得にトライ On Error Resume Next datetime1 = msg.ReceivedTime On Error Goto 0 ' 受信日時が取得できない場合、開始日時を取得 If datetime1 = "" Then datetime1 = msg.Start End If ' 受信日時を「yyyymmdd_hhmmss_」にする。 sReceivedTime = date2yyyymmdd_hhmmss(datetime1) & "_" ' msgファイル閉じる msg.Close(olDiscard) ' 1 ドキュメントに対する変更内容を破棄。 ' フォルダ spath = fso.GetParentFolderName(path) ' 新ファイル名生成 sFileName = sReceivedTime & fso.GetFileName(path) ' ファイルリネーム実行 fso.MoveFile path ,fso.BuildPath(spath , sfilename) End If Next ' 日時をyyyymmdd_hhmmss形式で返す Function date2yyyymmdd_hhmmss(pDate) y = Year(pDate) mon = Right("0" & Month(pDate), 2) d = Right("0" & Day(pDate), 2) h = Right("0" & Hour(pDate), 2) m = Right("0" & Minute(pDate), 2) s = Right("0" & Second(pDate), 2) date2yyyymmdd_hhmmss = y & mon & d & "_" & h & m & s End Function
■JScript版 「msgファイル名に日時付与.js」で保存
var fso = new ActiveXObject("Scripting.FileSystemObject") var oOutlook = new ActiveXObject("Outlook.Application") // パラメータ取得 var args = WScript.Arguments var datetime1 // パラメータにループ for (i = 0; i < args.length; i++) { // パラメータのパスを取得 path = args(i); // 拡張子を取得 ext = fso.GetExtensionName(path) // 拡張子がmsgファイルなら以下処理を実施する if (ext == "msg") { // msgファイルを開く var msg = oOutlook.CreateItemFromTemplate(path); // 受信日時を取得 datetime1 = msg.ReceivedTime; // 受信日時が取得できない場合は開始日時を取得する if (datetime1 == undefined) { datetime1=msg.Start } // 受信日時を「yyyymmdd_hhmmss_」にする。 var sReceivedTime = date2yyyymmdd_hhmmss(datetime1) + '_'; // msgファイル閉じる msg.Close(1); // 1(olDiscard) ドキュメントに対する変更内容を破棄。 // フォルダ var spath = fso.GetParentFolderName(path); // 新ファイル名生成 var sFileName = sReceivedTime + fso.GetFileName(path); // ファイルリネーム実行 //WScript.echo(path + ' → ' + fso.BuildPath(spath, sFileName)); fso.MoveFile(path, fso.BuildPath(spath, sFileName)); } } // 日付を受取る。 // yyyymmdd_hhmmss で返す。 function date2yyyymmdd_hhmmss(pDate) { var d = new Date(pDate); var year = d.getFullYear(); // 年 var month = ('0' + (d.getMonth() + 1)).slice(-2); // 後ろの2文字 var day = ('0' + d.getDate()).slice(-2); var hour = ('0' + d.getHours()).slice(-2); var minute = ('0' + d.getMinutes()).slice(-2); var second = ('0' + d.getSeconds()).slice(-2); return year + month + day + '_' + hour + minute + second; }