Batch file FFmpeg-检查文件夹是否包含具有2个不同扩展名的匹配文件名,并忽略这两个文件。仅处理扩展名为1的文件名

Batch file FFmpeg-检查文件夹是否包含具有2个不同扩展名的匹配文件名,并忽略这两个文件。仅处理扩展名为1的文件名,batch-file,type-conversion,Batch File,Type Conversion,我需要批量转换一个文件夹中的所有mkv文件递归到mp4 如果文件名存在并且与两个扩展名都匹配,则忽略这两个文件并仅处理包含mkv的文件名,而不处理与mp4匹配的文件名 示例:cat.mkv存在于带有cat.mp4=忽略这两个文件的文件夹中 示例:cat.mkv存在于文件夹中,并且cat.mp4不=处理cat.mkv到cat.mp4 我包含了一个不太好用的脚本。它处理所有mkv文件和mp4文件。mp4文件会抛出一个错误,因为FFmpeg不会以这种方式在其自身上编码相同的格式 一如既往地感谢任何有一

我需要批量转换一个文件夹中的所有mkv文件递归到mp4

如果文件名存在并且与两个扩展名都匹配,则忽略这两个文件并仅处理包含mkv的文件名,而不处理与mp4匹配的文件名

示例:
cat.mkv
存在于带有
cat.mp4
=忽略这两个文件的文件夹中

示例:
cat.mkv
存在于文件夹中,并且
cat.mp4
不=处理
cat.mkv
cat.mp4

我包含了一个不太好用的脚本。它处理所有mkv文件和mp4文件。mp4文件会抛出一个错误,因为FFmpeg不会以这种方式在其自身上编码相同的格式

一如既往地感谢任何有一些想法的人

更新:我可能已经让它工作了。我改变了一些原来的东西。如果有人成功或有改进的想法,我洗耳恭听。谢谢

版本2

@ECHO ON
SETLOCAL
PROMPT $G
COLOR 0A

REM Set FFmpeg.exe location if not in system PATH already
SET FF=C:\MAB\local64\bin-video\ffmpeg.exe

REM Set MKV files root folder to recursively search
SET "mkvPATH=C:\Encoding\1_Original\Test\"

REM Change into mkvPATH DIR
CD "C:\Encoding\1_Original\Test"

REM Set temp file name
SET TEMPFILE=convert_mkv.bat

REM Create empty convert file
COPY NUL "%TEMPFILE%" >NUL 2>&1

REM ADD @ECHO OFF to top of blank convert_mkv.bat script
ECHO @ECHO OFF >>"%TEMPFILE%"

REM Recursively search MKV root folder
FOR /R "%mkvPATH%" %%G IN (*.mkv *.mp4) DO (
    SET "GPATH=%%~fG"
    SET "GNAME=%%~nG"
    SETLOCAL ENABLEDELAYEDEXPANSION

    REM Ignore all files that have both
    REM extensions ".mkv" and ".mp4" in the file name
    IF "%%~nG.mkv"=="%%~nG.mkv" (
        IF NOT EXIST "%%~nG.mp4" (
            CALL :DO_FFmpeg "!GPATH!"
            IF "%%~nG.mkv"=="%%~nG.mkv" (
                IF EXIST "%%~nG.mp4" (
                    ECHO(>>"%TEMPFILE%"
                ) ELSE ENDLOCAL
            )
        )
    )
)
GOTO END

REM CALL variables for use in FFmpeg's command line
:DO_FFmpeg
IF "%~1"=="" GOTO :END
FOR %%I IN ("%~1") DO (
    SET "FOLDER=%%~dpI"
    SET "NAME=%%~nxI"
)

REM Export info to "%TEMPFILE% and RUN ffmpeg.exe's command line in the cmd.exe window
ECHO %FF% -y -i "%~1" -ss 0 -t 300 -codec copy "%FOLDER%%~n1.mp4">>"%TEMPFILE%" && %FF% | %FF% -y -i "%~1" -ss 600 -t 30 -codec copy "%FOLDER%%~n1.mp4"

:END
PAUSE
EXIT /B

对于%%G in(“*.mkv”)如果不存在请执行“%%~nG.mp4”echo执行某些操作…
?非常简单,我认为使用其他代码可以很好地工作。如果我想出什么办法,我会让你知道的。我认为我的第二次修订现在也可以了。