スポンサーリンク

Outlookのmsgファイルに日時を付けるvbs js

Outlookでメールをmsgファイルに保存することがよくあります。
その時、以下のようなことをよく実施します。
①msgファイルに保存
 <例> メール1.msg
②msgファイルを開き
③受信日時を選択してコピー
 
④ファイル名の先頭につける
 20230130 (月) 2103_メール1.msg
上記の②~④の動作を自動化するスクリプトを作ってみました。
日時は曜日は入らず「yyyymmdd_hhmmss_」が付きます。
JavaScriptにも慣れようとJScript版も作っています。
普通のメールの場合は受信日時を使用します。会議・予定の場合は開始日時を使用します。

■使い方
①以下のソースをファイルに保存。VBScriptJScriptどちらでも。
②あとは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;
}