Reputation: 67
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
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