ファイル名を一括して変更するバッチファイル。
batファイル
@echo off
rem フォルダ内のPNGファイルをファイル名の昇順でソートし、ファイル名を連番にして変更する
rem サンプルではファイル名が"s"で始まるPNGファイルのみ対象。
rem リネーム名:TC-IN-XXX、TC-OUT-XXX
rem 第1引数 リネームするファイルのXXX(連番)開始番号 ※省略した場合は「1」
rem 第2引数 リネームするファイルの対象ディレクトリ ※省略した場合は自分自身のディレクトリ
SETLOCAL enabledelayedexpansion
rem リネームするファイル名のプレフィックスとサフィックスの指定
set preFix=TC-
set suffixIn=-IN
set suffixOut=-OUT
rem コピーしたファイルを格納するフォルダ(yyyymmddHMMSSTT)
set dateStrTmp1=%date%
set dateStrTmp2=!dateStrTmp1:/=!
set dateStrTmp3=!dateStrTmp2: =!
set dateStr=!dateStrTmp3:~0,8!
set timeStrTmp1=%time%
set timeStrTmp2=!timeStrTmp1::=!
set timeStrTmp3=!timeStrTmp2:.=!
set timeStr=!timeStrTmp3: =0!
set newDirName=!dateStr!!timeStr!
md !newDirName!
set startNm=%1
if "!startNm!"=="" (
set userInputFilePath=
rem 入力要求
echo ファイル名の項番を外部ファイルより読み込む場合は
echo ファイルパスを入力して下さい。
echo 空欄の場合は連番にします。
set /P userInputFilePath="【ファイルパス】:"
)
echo;
echo ----------------------------------------------
rem ユーザ入力が空の場合はファイル名の項番を初期化
if "!userInputFilePath!"=="" (
if "!startNm!"=="" (
echo 「項番」を自動連番します。
echo 開始番号を入力して下さい。空欄の場合は「001]から採番します。
set /P startNm="【開始番号】:"
echo;
)
rem 第1引数によりファイル名の連番を指定する。
if not "!startNm!"=="" (
rem 引数有:引数指定の数値 + 1 から連番
set /a fileNm="!startNm!"-1
)else (
rem 引数無し:001 から連番
set /a fileNm=0
)
) else (
if EXIST !userInputFilePath! (
rem 何もしない
) else (
echo 指定したファイルが存在しない為、処理を中止します。
rd /q !newDirName!
pause
exit
)
)
rem 第2引数によりリネームするファイルのディレクトリを指定
if not "%2"=="" (
cd %2
set targetDir=%2\
) else (
set targetDir=%~dp0
)
rem ファイル名が"s"で始まるPNGファイルのファイル名を一時ファイルに書き出す
dir /b /on ^s*.png > temp.txt
set /a cnt=1
for /f "tokens=1,2" %%j in (temp.txt) do (
set /a amari=cnt%%2
if !amari! equ 1 (
if not "!userInputFilePath!"=="" (
rem ユーザ入力があった場合は連番を外部ファイルより読み込んで設定する
call :readNmFromOutFile
set /a fileNm=!errorlevel!
) else (
rem 連番を引数(or 1)から設定するはインクリメントする
set /a fileNm+=1
)
)
set fileNmStr=00!fileNm!
set fileNmStr=!fileNmStr:~-3!
if !amari! equ 0 (
set newFileName=!preFix!!fileNmStr!!suffixOut!
) else (
set newFileName=!preFix!!fileNmStr!!suffixIn!
)
set newFileName=!newFileName!
echo "%%j %%k" → !newFileName!.png
copy "%%j %%k" !newDirName!\!newFileName!.png
echo ----------------------------------------------
set /a cnt+=1
)
pause
del !targetDir!temp.txt
rem ユーザ入力があった場合は項番を外部ファイルより読み込んで返す
rem
:readNmFromOutFile
set /a tmpCnt=!cnt!+1
set /a tmpCnt=!tmpCnt!/2
set /a innerCnt=1
for /f "tokens=1" %%i in (!userInputFilePath!) do (
if !innerCnt! equ !tmpCnt! (
set /a fileNm=%%i
)
set /a innerCnt+=1
)
exit /b !fileNm!
ENDLOCAL