Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
複数ファイルを一括で連番付きファイル名にリネームするバッチファイル
@echo off
setlocal enabledelayedexpansion
:: 連番(整数)
set /a INT_INDEX=1
:: 連番を0で桁揃えする長さ
set PAD_LENGTH=3
:: リネームしたファイル数
set /a FILE_NUM=0
set /p PREFIX="ファイル名の先頭につける文字列を入力してください : "
:: ループ処理開始
:loop_start
:: 引数がなくなったら終了
if "%~1"=="" goto loop_exit
:: ファイルが存在しないときはスキップする
if not exist "%~1" (
echo ファイル "%~1" は存在しません。スキップします。
shift
goto loop_start
)
pushd "%~dp1"
:: 0で桁揃えした連番をつくる
set INDEX=00000000000000%INT_INDEX%
set INDEX=!INDEX:~-%PAD_LENGTH%!
:: リネーム処理
set FILENAME="%~nx1"
set EXTENSION=%~x1
set NEW_FILENAME="%PREFIX%_%INDEX%%EXTENSION%"
ren %FILENAME% %NEW_FILENAME%
:: エラー処理
if not %ERRORLEVEL%==0 (
if exist %NEW_FILENAME% (
:: ファイル名の重複でリネームが失敗したときは次の連番でリネームを試みる
set /a INT_INDEX+=1
goto loop_start
) else (
:: その他のエラー時
echo 不明なエラー : %FILENAME%。スキップします。
shift
goto loop_start
)
)
:: ログ出力
echo %FILENAME%%NEW_FILENAME%
popd
shift
set /a INT_INDEX+=1
set /a FILE_NUM+=1
goto loop_start
:: ループ処理終了
:loop_exit
echo %FILE_NUM%個のファイルをリネームしました。
pause
endlocal
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment