
10年ぶりくらいに「Namexif」を使おうとしたら、Windows 11 では動かなくなっていた・・・。リンク先に最新版があるが、自分でbat作った方が好みの動作にならないか?
という事で、似たような動きをする bat ファイルを作成した(というか、AIに作らせた)のでメモ。
使い方&注意事項
- リネームしたいファイルを、この bat に D&D すればOK。
- 複数ファイルを一気にリネーム可能。
- ファイルは以下のような名前にリネームされる。
「2026-0930-2230-15-指定した名前.拡張子」
↑「指定した名前」は、自身でbatファイルを書き替える。 - 同時刻のファイルの場合でも、--01、--02、と連番化される。
- 元のファイルに上書きするので、失敗が怖い場合は自身でバックアップする事。
------------ - 素人が雑にAI指示して作ったモノなので、利用は自己責任で。
- Windows 11 25H2 (26200.9457)で動作確認。
PowerShell を使っているので、古い Windows では動かないかもしれない。
ファイル名を「更新日時+α」にするバッチ
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.元のファイルに上書きするので、失敗が怖い場合は自身でバックアップする事
『ファイル名を「作成日時+α」にするバッチ』は以上。