Mi secuencia de comandos por lotes no puede coincidir con las imágenes JPG de la portada al mezclar archivos en un MKV

Mi secuencia de comandos por lotes no puede coincidir con las imágenes JPG de la portada al mezclar archivos en un MKV

Escribí el código y quiero usarlo para mi archivo. Gracias por ayudarme a mejorarlo.

Las carpetas que contienen los archivos son las siguientes (ej.):

Tengo carpeta /S01, /s02, /s0n...

/S01/01.mkv, 02.mkv,..., cover.jpg
/S02/01.mkv, 02.mkv,..., cover.jpg

En cada subcarpeta hay un archivo llamado cover.jpgque quiero adjuntar a todos los archivos de esa carpeta pero no puedo modificar mi código para que funcione correctamente.

El código escrito no pudo identificar el contenido cover.jpgen cada carpeta.

Aquí está el código:

@ECHO OFF
For /R %%A IN (*.mkv
) Do (
  "C:/Program Files/MKVToolNix\mkvmerge.exe" -o "%%~dpnxAtmp" --no- ^
  attachments --no-chapters --no-global-tags --no-subtitles --title ^"^" ^
  --language 0:und --language 1:en --track-name 0: --track-name 1: "%%~fA" ^
  --attachment-name cover.jpg --attachment-mime-type image/jpeg --attach-file ^ 
  "%*cover.jpg"
  if errorlevel 2 ( 
      echo errors generated during remuxing, original file not deleted
    ) else if errorlevel 1 (
      del/f "%%~fA" echo Warnings generated during remuxing to "%%~A", original file deleted
    ) else (
      del/f "%%~fA" echo Successfully remuxed to "%%~A", original file deleted
    ) & for /R %%A IN (*.mkvtmp) do ren "%%~fA" "%**.mkv" & CLS
)
pause

Respuesta1

@echo off && setlocal 

cd /d "%~dp0" & title <nul & title .\%~nx0 

for /f tokens^=* %%A IN ('where /r . *.mkv^|%__AppDir__%findstr.exe/vei mkvtmp
')Do (call ) &<con: "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%%~fAtmp" ^
 --no-attachments --no-chapters --no-global-tags --no-subtitles --title ^"^" ^
 --language 0:und --language 1:en --track-name 0: --track-name 1: "%%~dpnxA" ^
 --attachment-name cover.jpg --attachment-mime-type image/jpeg --attach-file ^
 "%%~dpAcover.jpg" & call %:^) %errorlevel% "%%~fA"

for /R %%A IN (*.mkvtmp)do >nul move /y "%%~fA" "%%~dpnA.mkv"
<con: endlocal && %__AppDir__%timeout.exe /t -1 && goto :EOF 
     
%:^)
if %~1 equ 0 ( 
      del /q /f "%~2" && echo[Successfully remuxed to "%~nx2", original file deleted
    ) else if %~1 equ 1 ( echo[errors generated during remuxing, original file not deleted
    ) else if %~1 equ 2 echo[Warnings generated during remuxing to "%~nx2", original file deleted
      exit /b 

1.NecesitasSETLOCAL

ErrorLevel
When run from a batch file, SETLOCAL will always set an ERRORLEVEL.
If given a valid argument or no arguments, a new environment is created %ERRORLEVEL% = 0
If bad parameters given, %ERRORLEVEL% = 1

2.Reemplace for /Rcon (recursivamente) una lista for /Fde where /rtodos sus archivos .mkvque debe evitar.mkvtmppresentar confindstr /v

for /f tokens^=* %%A IN ('where /r . *.mkv^|%__AppDir__%findstr.exe/vei mkvtmp

3.Comience su bucle reiniciando errorlevelcon (call )// crédito a@aschipfl

... ')Do (call ) &<con: ... 

4.Implemente una función, donde pueda pasar el archivo actual errorlevelcomo parámetro ( %~1 == %errorlevel%) también el archivo actual ( %~2 == %%~fA)

%:^)
if %~1 equ 0 ( 
      ...
    ) else if %~1 equ 1 ( ...
    ) else if %~1 equ 2 ...
      exit /b 

5.Dentro de esta función (etiqueta :^)), deje que el parámetro errorlevel/ sea tratado mediante condiciones %1condicionales :if else if else

%:^)
if %~1 equ 0 ( 
      del /q /f "%~2" && echo[Successfully remuxed to "%~nx2", original file deleted
    ) else if %~1 equ 1( echo[errors generated during remuxing, original file not deleted
    ) else if %~1 equ 2 echo[Warnings generated during remuxing to "%~nx2", original file deleted
      exit /b 

Obs.: 1Reemplace su código "%*cover.jpg"en "%%~dpAcover.jpg"el for /f (or /R)bucle y mkvmerge.exedesafortunadamente no traducirán ni elegirán un archivo basado en esta cadena.%*cover.jpg:

Obs.: 2El último comando ( ren) no reemplazará el archivo existente, puede intentar reemplazarlo renusando move /yel nombre de destino"%**.mkv" "%%~dpnA.mkv"

for /R %%A IN (*.mkvtmp) do ren "%%~fA" "%**.mkv"

for /R %%A IN (*.mkvtmp)do >nul move /y "%%~fA" "%%~dpnA.mkv"

Recursos adicionales:

información relacionada