MKVMerge и пакетный файл

Я использую пакетные файлы для редактирования метаданных и треков для разных телесериалов, и пока все идет отлично. Однако сериал, над которым я сейчас работаю, имеет восклицательные знаки в каждом эпизоде.

Форматы файлов всегда будут в следующем формате: S00E00 — название эпизода.

Вот шаблон, который я использовал для большинства шоу.

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!^"
)

Моя проблема связана с использованием переменных в call %mkvmerge%, когда они имеют восклицательные знаки. Есть ли способ обойти это?


person CrunchyHotDogs    schedule 22.03.2017    source источник


Ответы (1)


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

(не проверено из-за отсутствия примеров)

delayedexpansion можно избежать, если вы используете подпрограмму. Синтаксис SET "var=value" (где значение может быть пустым) используется для обеспечения того, чтобы любые лишние пробелы в конце НЕ включались в присваиваемое значение. set /a можно смело использовать "без кавычек".

person Magoo    schedule 22.03.2017
comment
Спасибо тебе за это. Это дало мне строительные блоки, в которых я нуждался. Хотя мне пришлось кое-что изменить в этом. Мне пришлось изменить настройку переменной mkvmerge на set mkvmerge="C:/Program Files/MKVToolNix\mkvmerge.exe". Мне также пришлось создать новую переменную для пути к файлу, которая используется в call %mkvmerge% для замены %ep%. Также есть лишний восклицательный знак в --track-name "0:%ep_name!%". - person CrunchyHotDogs; 24.03.2017
comment
ОК - убран лишний восклицательный знак, исправлены неправильные косые черты в пути mkvmerge и добавлены необходимые кавычки в call в подпрограмме. Я же сказал, что это не проверено :) - person Magoo; 24.03.2017