「送る」で複数のファイルに一括で更新日付を付加する
下記を保存して「送る」フォルダ内に置く。
Rename.VBS (mirror)
「お忍びリネーム」にてファイル名の末尾に更新日付を付加する機会が多かったが、
Windows7環境に移行して以来正常に動作していないため、VBSにて同様の機能を再現した。
ファイルを選択して右クリック>送る>上記VBSを呼び出す。複数指定可。

リネーム結果がダイアログで表示される。邪魔ならコメントアウトする。

処理結果。ファイル名の末尾に更新年月日がYYYYMMDDHHMMSS形式で付加される。
「コピー」の文言は除去される。

Option Explicit
Const Usage="Usage: CScript.exe Rename.VBS files..."
Dim fso ' FileSystemObject
Dim Path ' 現状フルパス
Dim NewPath ' 変換後フルパス
Dim OldFileName ' 現状ファイル名
Dim NewFileName ' 変更後ファイル名
Dim YMDHMS ' 更新日付
Dim ext ' 拡張子
Dim Msg ' 処理完了時メッセージ
Dim Result ' 処理結果
Dim k ' 汎用
Dim Ans ' 汎用
' 引数制限数変更
If WScript.Arguments.Count()<=0 Then
WScript.Echo Usage
WScript.Quit
End If
Set fso=CreateObject("Scripting.FileSystemObject")
For k=0 To WScript.Arguments.Count()-1
Path=WScript.Arguments.Item(k)
If fso.FileExists(Path) Then
ext = fso.GetExtensionName(Path) ' 拡張子の取得
YMDHMS = getNowYMDHMS(fso.GetFile(Path).DateLastModified) ' 更新日付取得
OldFileName = fso.GetFileName(Path) ' 変更前ファイル名 ログ出力用
NewFileName = fso.GetBaseName(Path) ' 拡張子除去したファイル名取得
NewFileName = repReg(NewFileName," - コピー.*$|^コピー (|\([0-9]+\) )〜 ","") ' コピー〜の除去
NewFileName = repReg(NewFileName,"_19\d{12}(\b)","$1") ' 年月日除去
NewFileName = repReg(NewFileName,"_20\d{12}(\b)","$1") ' 年月日除去
NewFileName = NewFileName & "_" & YMDHMS & "." & ext ' ファイル名組立て
NewPath = fso.GetParentFolderName(Path) & "\" & NewFileName ' パス組立て
If Path <> NewPath Then ' パスに変化がある場合のみリネーム実施
Result="×"
If fso.FileExists(NewPath) Then
Ans=MsgBox("ファイル名と更新日付が同一のファイルが既に存在します。"&vbLf&vbLf&_
"現状 :"&OldFileName&vbLf& _
"変換後:"&NewFileName&vbLf&vbLf& _
"当ファイルを削除しますか?",_
vbYesNoCancel+vbQuestion,"ファイル削除の確認")
If Ans = vbYes Then
fso.DeleteFile(Path)
Result="−"
End If
Else
fso.MoveFile Path,NewPath ' リネーム
Result="○"
End If
Msg = Msg & " " & OldFileName & vbLf & Result & "> " & NewFileName & vbLf
End If
End If
Next
If Len(Msg)>0 Then
WScript.Echo("【結果】 ×:無視 −:削除 ○:リネーム" & vbCrLf & Msg)
End If
WScript.Quit
' 正規表現でマッチした先頭の文言を抽出
' http://d.hatena.ne.jp/cloned/20090205/
Function getReg(ByVal argTarget, ByVal argPtn)
Dim re,matches
Set re = New RegExp
re.Pattern = argPtn
set matches = re.Execute(argTarget)
If matches.Count = 0 Then
getReg = argTarget
Else
getReg = matches.Item(0)
End If
End Function
' 正規表現でマッチした文言を置換
Function repReg(ByVal argTarget, ByVal argPtn, ByVal argRep)
Dim re,matches
Set re = New RegExp
re.Pattern = argPtn
repReg = re.Replace(argTarget,argRep)
End Function
' 日付をYYYYMMDDHHMMSS形式に変換
' http://blog.livedoor.jp/akf0/archives/51369351.html
Function getNowYMDHMS(ArgDate)
getNowYMDHMS = Year(ArgDate)
getNowYMDHMS= getNowYMDHMS & Right("0" & Month(ArgDate) , 2)
getNowYMDHMS= getNowYMDHMS & Right("0" & Day(ArgDate) , 2)
getNowYMDHMS= getNowYMDHMS & Right("0" & Hour(ArgDate) , 2)
getNowYMDHMS= getNowYMDHMS & Right("0" & Minute(ArgDate) , 2)
getNowYMDHMS= getNowYMDHMS & Right("0" & Second(ArgDate) , 2)
End Function