Квадратные скобки должны быть экранированы
Используйте следующий пакетный файл:
@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
Дальнейшее чтение
РЕДАКТИРОВАТЬ: оригинальный код не будет работать, если вы встретите файл (или путь к файлу), который содержит !
символ, потому что отложенное расширение включено, а переменная FOR раскрывается до отложенного расширения. Так что имена с !
будет поврежден.
Это легко исправить, включив и выключив отложенное расширение внутри цикла, так что переменные FOR не раскрываются, пока включено отложенное расширение.
@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