【windowsバッチ】ドラッグドロップでファイル名に現在日付や更新日、作成日を追加する

概要

Amazonの領収書(pdf)に一括で日付をつけたい瞬間はありませんか? 私はあったのでドラッグドロップで日付追加をできるようにしました。

コード

下記を.batで保存してドラッグドロップすると、ファイル名の先頭に現在日付で「yyyy-MM-dd_」を追加してくれます。

@echo off

REM 現在日付の取得
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "newdate=%YY%-%MM%-%DD%"

REM 日付を出力
echo %newdate%

for %%f in (%*) do (
REM ドラッグドロップされたファイルをリネーム
  rename "%%~nxf" "%newdate%_%%~nxf"
)

ファイル作成日か更新日のいずれか古い方を行頭に追加したい場合

下記はドラッグドロップされたそれぞれのファイルに対して「yyyyMMdd_元のファイル名」の形式でリネームします。
金額だけ手動で入れてファイル保存部分だけでも電子帳簿保存法に対応できないかなと思い作成しました。
参考:【電子帳簿保存法】手間とお金をかけずに対応する方法を税理士がわかりやすく解説!

REM @echo off
setlocal enabledelayedexpansion

for %%f in (%*) do (
    REM ファイル名の引用符を正しく処理
    set "filename=%%~f"

    REM ファイルの作成日時をyyyyMMdd形式で取得
    for /f "tokens=2 delims==" %%a in ('wmic datafile where "name='!filename:\=\\!'" get CreationDate /value') do (
        if not "%%a"=="" set "createDate=%%a"
    )
    set "createDate=!createDate:~0,8!"

    REM ファイルの更新日時をyyyyMMdd形式で取得
    set "UPDATE=%%~tf"
    set "YYYYMMDD=!UPDATE:~0,4!!UPDATE:~5,2!!UPDATE:~8,2!"
    set "modifyDate=!YYYYMMDD!"

    REM 作成日時と更新日時を比較して古い方を選択
    if !createDate! lss !modifyDate! (
        set "usedate=!createDate!"
    ) else (
        set "usedate=!modifyDate!"
    )

    REM 日付を出力
    echo 作成日時: !createDate!, 更新日時: !modifyDate!, 使用する日付: !usedate!

    REM ファイル名の先頭に日付を追加してリネーム
    set "newname=!usedate!_%%~nxf"
    rename "!filename!" "!newname!"
)

endlocal

おわり。