2017-03-22 5 views
0

J'utilise des fichiers de traitement par lots pour éditer les métadonnées et les pistes de différentes séries télévisées, et jusqu'ici tout s'est bien passé. Cependant la série que je suis en train de faire en ce moment a des points d'exclamation dans chaque épisode.MKVMerge and Batch File

Les formats de fichiers vont toujours être dans ce format: S00E00 - Episode Nom

Voici le modèle que je l'ai utilisé pour la plupart des spectacles.

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

Mon problème vient de l'utilisation de variables dans le call %mkvmerge% quand ils ont des points d'exclamation. Y a-t-il moyen de contourner cela?

Répondre

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 

(non testé faute d'exemples)

delayedexpansion peuvent être évités si vous utilisez un sous-programme. La syntaxe SET "var=value" (où la valeur peut être vide) est utilisée pour s'assurer que les espaces de fin de fuite ne sont PAS inclus dans la valeur assignée. set /a peut être utilisé en toute sécurité "quoteless".

+0

Merci pour cela. Cela m'a donné les blocs de construction dont j'avais besoin. J'ai dû changer quelques choses avec ça. J'ai dû changer la définition de la variable mkvmerge à 'set mkvmerge =" C:/Program Files/MKVToolNix \ mkvmerge.exe "'. J'ai également dû créer une nouvelle variable pour le chemin du fichier, qui est utilisé dans 'call% mkvmerge%' pour remplacer le '% ep%'. Il y a aussi un point d'exclamation supplémentaire dans '--track-name" 0:% ep_name!% "'. – CrunchyHotDogs

+0

OK - supprime le point d'exclamation supplémentaire, fixe les barres obliques incorrectes dans le chemin d'accès 'mkvmerge' et ajoute les guillemets requis dans le' call' du sous-programme. J'ai dit 'twas non testé :) – Magoo