Пакетное изменение заголовков файлов 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
Другие вопросы по тегам