Os colchetes devem ser escapados
Use o seguinte arquivo em lotes:
@echo off
setlocal
setlocal enabledelayedexpansion
for /r %%f in (*.mkv) do (
set _a=%%~nf
set _b=!_a:[=\[!
set _name=!_b:]=\]!
set _c=%%f
set _d=!_c:[=\[!
set _fullname=!_d:]=\]!
ffmpeg -i "!_fullname!" -vf subtitles="!_name!.mkv" -acodec copy "!_name!.mp4"
)
endlocal
pause
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- enabledelayedexpansion - Expansão com atraso fará com que as variáveis sejam expandidas em tempo de execução e não no tempo de análise.
- para / r - Fazer um loop pelos arquivos (criar subpastas).
- definir - Exibir, definir ou remover variáveis de ambiente do CMD. As alterações feitas com o SET permanecerão apenas pela duração da sessão atual do CMD.
- editar / substituir variável - Edite e substitua os caracteres atribuídos a uma variável de string.
-
Documentação do FFmpeg: Citando e escapando - Detalhes citando e escapando específicos de
ffmpeg
.
EDITAR:
O código original falhará se você executar em um arquivo (ou caminho de arquivo) que contém o caractere !
porque a expansão atrasada está habilitada e a variável FOR é expandida antes da expansão atrasada. Então, os nomes com !
serão corrompidos.
Isso é fácil de corrigir ativando e desativando a expansão atrasada dentro do loop, de forma que nenhuma variável FOR seja expandida enquanto a expansão atrasada é ativada.
@echo off
setlocal disableDelayedExpansion
for /r %%f in (*.mkv) do (
set _a=%%~nf
set _c=%%f
setlocal enableDelayedExpansion
set _b=!_a:[=\[!
set _name=!_b:]=\]!
set _d=!_c:[=\[!
set _fullname=!_d:]=\]!
ffmpeg -i "!_fullname!" -vf subtitles="!_name!.mkv" -acodec copy "!_name!.mp4"
endlocal
)
endlocal
pause