Пакетное изменение заголовков файлов MKV в нескольких каталогах
Хорошо, я новичок в этом... По сути, я использую инструментальный вызов mkvpropedit для редактирования заголовка моих файлов.mkv. Моя цель - создать пакет, который проходит через все подкаталоги и заменить заголовки файлов mkv на их имя файла.
Я сделал следующий прогресс...
for %%A in (*.mkv) do "C:\mkvpropedit.exe" "%%A" --edit info --set title="%%A"
Проблема с [1]: работает нормально, но не влияет на все подкаталоги, и мне придется использовать пакет во всех подкаталогах по одному, что будет занимать много времени.
for /R "C:\whatever" %%I in (*mkv) do "C:\whatever\mkvpropedit.exe" "%%I" --edit info --set title="%%I"
Проблема здесь, Это затрагивает все подкаталоги, но мои заголовки файла.mkv заканчиваются полным путем каталога вместо имени файла.
Может ли кто-нибудь помочь мне здесь? Заранее большое спасибо.
Кстати, если кто-нибудь знает, как задать длинный путь к каталогу в краткой форме, которую следует использовать в скрипте (например, "C:\what \ what...\mkvpropeditexe в mkvpropedit"), это было бы полезно.
2 ответа
Используете ли вы %%~nI
или же %%~nxI
(как предполагает Герхард Барнард) зависит от того, как вы хотите заголовок: только " n ame" или " n ame.e xtension".
за how to set a long directory pathway into a short form to be use repeated throughout the script
; установите переменную с полным путем \ именем и используйте переменную:
set "mkv=C:\whatever\mkvpropedit.exe"
for /R "C:\whatever" %%I in (*.mkv) do "%mkv%" "%%I" --edit info --set title="%%~nI"
Используя помощь из этой темы, вот немного более сложный пакетный скрипт, который я разработал:
rem This Bat file will take MKV filenames and apply them to MKV info titles
@echo off
rem Modify next line to path where mkvpropedit.exe !!!!!!!!!
cd "C:\Program Files\MKVToolNix"
set /A errors1=0
rem Modify next line to path where MKV files are. This will also modify MKV's in subdirectories. !!!!!!!!!
for /R "X:\Move" %%X in (*.mkv) DO CALL :loopbody %%X
echo.
echo.
echo Total Errors = %errors1%
echo.
pause
GOTO :EOF
:loopbody
set title0=%*
set "title1=%title0:.mkv=%"
set "title2=%title1:\=" & set "title2=%"
rem The following two lines are to remove additional info I use in the filenames.
set "title3=%title2: 1080p=%"
set "title4=%title3: 720p=%"
set command1=mkvpropedit "%title0%" --edit info --set "title=%title4%"
for /f "delims=" %%a in ('%command1%') do @set response1=%%a
echo %title2%
echo %response1%
echo.
echo.
if /i "%response1:~0,5%"=="Error" (set /A errors1=%errors1% + 1)
GOTO :EOF