CrunchyHotDogs
CrunchyHotDogs

Reputation: 67

MKVMerge and Batch File

I've been using batch files to edit the metadata and tracks for different tv series', and so far it's been going great. However the series I'm currently doing right now has exclamation points in every episode.

The file formats are always going to be in this format: S00E00 - Episode Name

Here is the template I've been using for most shows.

setlocal enabledelayedexpansion
set mkvmerge="C:/Program Files/MKVToolNix\mkvmerge.exe"
set output_folder="C:\Games-And-Stuff\#Anime\zAnime\_Muxing\[[EPISODE_NAME]]"
for /r %%a in (*.mkv) do (
    set ep=%%~na
    set ep_name=!ep:~9!
    set ep_num=!ep:~4,2!
    call %mkvmerge% -o "%output_folder%\%%~na.mkv" --track-name ^"0:!ep_name!^" --track-name ^"1:[ENG] AAC 5.1^" --track-name ^"2:[JAP] AAC 2.0^" --track-name ^"3:[ENG] Signs and Songs^" --track-name ^"4:[ENG]^" --language 0:und --language 1:eng --language 2:jpn --language 3:eng --language 4:eng --default-track 0:yes --default-track 1:yes --default-track 2:no --default-track 3:yes --default-track 4:no --forced-track 3:yes "%%a" --track-order 0:0,0:1,0:2,0:3,0:4 --title ^"? - Episode !ep_num! - !ep_name!^"
)

My problem is coming from using variables in the call %mkvmerge% when they have exclamation points. Is there anyway to get around this?

Upvotes: 0

Views: 1410

Answers (1)

Magoo
Magoo

Reputation: 80003

setlocal DISabledelayedexpansion
set "mkvmerge=C:\Program Files\MKVToolNix\mkvmerge.exe"
set "output_folder=C:\Games-And-Stuff\#Anime\zAnime\_Muxing\[[EPISODE_NAME]]"
for /r %%a in (*.mkv) do (
    set ep=%%~na
    call :merge
)
goto :eof

:merge
set ep_name=%ep:~9%
set ep_num=%ep:~4,2%
call "%mkvmerge%" -o "%output_folder%\%ep%.mkv" --track-name "0:%ep_name%" --track-name "1:[ENG] AAC 5.1" --track-name "2:[JAP] AAC 2.0" --track-name "3:[ENG] Signs and Songs" --track-name "4:[ENG]" --language 0:und --language 1:eng --language 2:jpn --language 3:eng --language 4:eng --default-track 0:yes --default-track 1:yes --default-track 2:no --default-track 3:yes --default-track 4:no --forced-track 3:yes "%ep%" --track-order 0:0,0:1,0:2,0:3,0:4 --title "? - Episode %ep_num% - %ep_name%"
goto :eof

(untested for lack of examples)

delayedexpansion can be avoided if you use a subroutine. The syntax SET "var=value" (where value may be empty) is used to ensure that any stray trailing spaces are NOT included in the value assigned. set /a can safely be used "quoteless".

Upvotes: 1

Related Questions