好吧,我是这个新手。 基本上,我使用工具调用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:\ whatever \ whatever ... \ mkvpropeditexe转换为mkvpropedit”,那么这将很有帮助。 / p>
答案 0 :(得分:2)
是否使用%%~nI
或%%~nxI
(如Gerhard Barnard所建议)取决于标题的使用方式:仅“ n ame”或“ n” ame.e x 张力”。
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"
答案 1 :(得分:0)
使用此线程的帮助,我开发了一个更精细的批处理脚本:
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