rename_bat

10年ぶりくらいに「Namexif」を使おうとしたら、Windows 11 では動かなくなっていた・・・。リンク先に最新版があるが、自分でbat作った方が好みの動作にならないか?
という事で、似たような動きをする bat ファイルを作成した(というか、AIに作らせた)のでメモ。

使い方&注意事項

ファイル名を「更新日時+α」にするバッチ

1.以下をメモ帳などにコピペする
2.文字コードを 「ANSI」 (Shift-JIS)に指定し、拡張子batで保存する。

実際のコード

@echo off
setlocal enabledelayedexpansion

:: 【設定】末尾に付けたい「特定の名前」をここに記入(空欄でも可)
set "suffix=-特定の名前"

:loop
if "%~1"=="" goto end

set "filepath=%~1"
if not exist "!filepath!" (
    shift
    goto loop
)

for %%I in ("!filepath!") do (
    set "folder=%%~dpI"
    set "ext=%%~xI"
)

:: PowerShellを使って「更新日時」を直接ハイフン区切り(yyyy-MMdd-HHmm-ss)で取得
for /f "usebackq tokens=*" %%A in (`powershell -NoProfile -Command "(Get-Item '%filepath%').LastWriteTime.ToString('yyyy-MMdd-HHmm-ss')"`) do (
    set "base_name=%%A!suffix!"
)

:: 重複チェックと連番(--01, --02...)の付与
set "final_name=!base_name!"
if exist "!folder!!final_name!!ext!" (
    set /a count=1
    :loop_count
    set "str_count=0!count!"
    set "str_count=!str_count:~-2!"
    set "final_name=!base_name!--!str_count!"
    if exist "!folder!!final_name!!ext!" (
        set /a count+=1
        goto loop_count
    )
)

:: ファイル名を変更
ren "!filepath!" "!final_name!!ext!"

shift
goto loop

:end
echo 処理が完了しました。
pause

3.コードの5行目にある set "suffix=-特定の名前" の部分を、
  お好みの文字列(例:-photo や -document など)に書き換える。
4.リネームしたいファイルを、この bat に D&D すればOK
5.元のファイルに上書きするので、失敗が怖い場合は自身でバックアップする事

『ファイル名を「更新日時+α」にするバッチ』は以上。

ファイル名を「作成日時+α」にするバッチ

1.以下をメモ帳などにコピペする
2.文字コードを 「ANSI」 (Shift-JIS)に指定し、拡張子batで保存する。
(CMDのコマンドでは仕様上「秒」が取得できないため、「更新日時版」と比較してやや複雑)

実際のコード

@echo off
setlocal enabledelayedexpansion

:: 【設定】末尾に付けたい「特定の名前」をここに記入(空欄でも可)
set "suffix=-特定の名前"

:loop
if "%~1"=="" goto end

set "filepath=%~1"
if not exist "!filepath!" (
    shift
    goto loop
)

for %%I in ("!filepath!") do (
    set "folder=%%~dpI"
    set "ext=%%~xI"
)

:: CMDのコマンドは仕様上「秒」が取得できない
:: PowerShellを使って日時を「YYYY-MMDD-HHMMSS」形式で正確に取得
:: ※作成日時の場合は .CreationTime 、更新日時の場合は .LastWriteTime に変更してください
for /f "usebackq tokens=*" %%A in (`powershell -NoProfile -Command "(Get-Item '%filepath%').CreationTime.ToString('yyyyMMdd_HHmmss')"`) do (
    set "raw_date=%%A"
)

:: 形式を「YYYY-MMDD-HHMMSS」に分解して組み立て
set "yyyy=!raw_date:~0,4!"
set "mmdd=!raw_date:~4,4!"
set "hhmm=!raw_date:~9,4!"
set "ss=!raw_date:~13,2!"
set "base_name=!yyyy!-!mmdd!-!hhmm!-!ss!!suffix!"

:: 重複チェックと連番(--01, --02...)の付与
set "final_name=!base_name!"
if exist "!folder!!final_name!!ext!" (
    set /a count=1
    :loop_count
    set "str_count=0!count!"
    set "str_count=!str_count:~-2!"
    set "final_name=!base_name!--!str_count!"
    if exist "!folder!!final_name!!ext!" (
        set /a count+=1
        goto loop_count
    )
)

:: ファイル名を変更
ren "!filepath!" "!final_name!!ext!"

shift
goto loop

:end
echo 処理が完了しました。
pause

3.コードの5行目にある set "suffix=-特定の名前" の部分を、
  お好みの文字列(例:-photo や -document など)に書き換える。
4.リネームしたいファイルを、この bat に D&D すればOK
5.元のファイルに上書きするので、失敗が怖い場合は自身でバックアップする事

『ファイル名を「作成日時+α」にするバッチ』は以上。