Cha
Cha

Reputation: 3

Batch file to rename specific files, exclude specific files in multiple folders

Good Day,

I have a folder that contains folders of movies on it. in each folder, there is the video files, .srt for subtitles, jpg for posters and lastly I included Trailers for the said movie.

I want a batch file that will:

  1. Rename all my ".mp4 .mkv .avi" movie files as well as ".srt" into its folder name (since I rename my Folders like this "Fight Club (1999)[1080p], so the movie file and .srt will be of same name, except of course it's extension).

  2. Rename all *.jpeg *.jpg *.png to "poster.jpg or poster.png".

  3. Rename all Trailer files to just "Trailer.mp4. I put Trailers for each of the movies, whenever you download one, I want to remove messy filenames like "---Fight Club - #TBT Trailer - 20th Century FOX" and just turn it into "Trailers.mp4.

  4. Exclude renaming those that already have the "Trailer" filename.

Each of the folder name will look like this: Fight Club (1999)[1080p].mp4, Fight Club (1999)[1080p].srt, Fight Club (1999)[1080p].nfo, poster.jpg, Trailer.mp4.

I made this but I encountered these:

  1. I can't rename the messy Trailer file into just "Trailer.mp4".
  2. Can't skip to rename the "Trailer.mkv", it renames to the folder name.

Help please, thanks a lot.

@echo off
setlocal EnableDelayedExpansion


cd /D "%~DP0"
echo BASE FOLDER: %cd%
set n=0
for /D %%a in (*) do (
set /A n+=1
cd "%%a"
echo ==================================================================
echo Processing folder: %%a
set movieName=%%~a

except (*Trailer.mp4)
except (*Trailer.mkv)

for %%b in (*.avi *.mp4 *.mkv) do (
   ren "%%~b" "!movieName!%%~Xb"
   echo Movie file "%%b" renamed to "!movieName!%%~Xb"


for %%b in (*.srt *.sub *.ass *.ssa *.idx) do (
   ren "%%~b" "!movieName!%%~Xb"
   echo File "%%b" renamed to "!movieName!%%~Xb"
)

for %%b in (*.jpeg *.jpg *.png) do (
   ren "%%~b" "!poster.jpg"
echo File "%%b" renamed to "!poster.jpg~Xb"
)

for fname in *Trailer; do
   newname=`echo "$fname" | sed 's/Trailer/Trailer/g'`
   sed 's/Trailer/Trailer/g' "$fname" >"$newname"
done

cd ..

)
echo ==================================================================

Upvotes: 0

Views: 2650

Answers (1)

user6811411
user6811411

Reputation:

Maybe this will help:

@echo off
setlocal EnableDelayedExpansion

cd /D "%~dp0"
echo BASE FOLDER: %cd%
set n=0
for /D %%a in (*) do (
    set /A n+=1
    PushD "%%a"
    echo ==================================================================
    echo Processing folder: %%a
    set "movieName=%%~a"

    rem except (*Trailer.mp4),except (*Trailer.mkv)
    for /f "delims=" %%b in (
      'dir /B *.avi *.mp4 *.mkv ^|findstr /i /v "Trailer" '
    ) do (
       ren "%%~b" "!movieName!%%~Xb" && ^
       echo Movie file "%%b" renamed to "!movieName!%%~Xb"
    )

    for %%b in (*.srt *.sub *.ass *.ssa *.idx) do (
       ren "%%~b" "!movieName!%%~Xb"&& ^
       echo File "%%b" renamed to "!movieName!%%~Xb"
    )

    for %%b in (*.jpeg *.jpg *.png) do (
        ren "%%~b" "poster%%~xb" && ^
        echo File "%%b" renamed to "poster%%~xb"
    )

    for /f "delims=" %%b in (
      'dir /B "*trailer*" '
    ) do (
       ren "%%~b" "Trailer%%~Xb" && ^
       echo Movie file "%%b" renamed to "Trailer%%~Xb"
    )
    PopD
)
echo ==================================================================

Upvotes: 1

Related Questions