VBScriptさんま屋.

VBScriptの個人的なメモです (´・ω・`)

ファイル名の頭に日付を加える

概要

ファイルをドラッグ&ドロップするとファイル名の頭に日付を加えるスクリプト。

test.txt -> 211113-1_test.txt

ファイル名の頭に日付を加える

Const APP_NAME = "ファイル名変更"

Dim args     '引数のコレクション
Dim filePath 'ドラッグ&ドロップしたファイルのパス
Dim fso      'ファイルシステムオブジェクト
Dim file     'ファイルオブジェクト
Dim head     '日付を表す6桁の数値

Set args = WScript.Arguments

'引数が1個でなければ終了
If args.Count <> 1 Then
    Msgbox "1ファイルをドラッグ&ドロップして下さい。",,APP_NAME
    WScript.Quit()
End If

filePath = args.Item(0)
Set fso = CreateObject("Scripting.FileSystemObject")

If fso.FileExists(filePath) Then
'ドラッグ&ドロップしたのがファイルであればファイルオブジェクトを取得
    Set file = fso.GetFile(filePath)
Else
'ドラッグ&ドロップしたのがフォルダであれば終了
    Msgbox "ファイルをドラッグ&ドロップして下さい。",,APP_NAME
    WScript.Quit()
End If

'ファイル名を変更
head = Get6Date()
Call Rename(file, head, 1) '3番目の引数は名前の重複を避けるための枝番

'終了処理
Set fso  = Nothing
Set file = Nothing


Function Get6Date()
'6桁の日付を返す
    Dim before

    before = Inputbox("何日前の日付にしますか", APP_NAME, 0)

    '数字でない場合やキャンセルボタンが押された場合は終了
    If before = "" Then WScript.Quit()
    If Not IsNumeric(before) Then WScript.Quit()

    before = CLng(before) '数字として扱う
    Get6Date = Right(Replace(Date() - before, "/", ""), 6)
End Function


Function Rename(f, head, branch)
'ファイル名変更
    Dim buf, newPath
    buf = f.Path & "\..\" & head & "-" & branch & "_" & f.Name
    newPath = fso.GetAbsolutePathName(buf)
    
    If fso.FileExists(newPath) Then
    '変更後と同名のファイルがあれば枝番を1増やして再起呼び出し
        Call Rename(f, head, branch + 1)
    Else
    '変更後と同名のファイルが無ければ名前を変更する
        f.Move(newPath) '変更
    End If
End Function