LoginSignup
1
5

More than 5 years have passed since last update.

ファイル名一括変更バッチ

Last updated at Posted at 2018-09-11

ファイル名を一括して変更するバッチファイル。

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

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5