Mein Batch-Skript kann die JPG-Coverbilder beim Muxen von Dateien in ein MKV nicht zuordnen

Mein Batch-Skript kann die JPG-Coverbilder beim Muxen von Dateien in ein MKV nicht zuordnen

Ich habe den Code geschrieben und möchte ihn für mein Archiv verwenden. Danke, dass Sie mir geholfen haben, ihn zu verbessern.

Die Ordner, die die Dateien enthalten, sind wie folgt (Beispiel):

Habe den Ordner /S01, /s02, /s0n...

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

In jedem Unterordner gibt es eine Datei mit dem Namen cover.jpg, die ich an alle Dateien in diesem Ordner anhängen möchte, aber ich kann meinen Code nicht so ändern, dass er richtig funktioniert.

Der geschriebene Code konnte nicht die cover.jpgeinzelnen Ordner identifizieren.

Hier ist der Code:

@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

Antwort1

@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.Du brauchstSETLOCAL

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.Ersetzen Sie for /Rdurch for /F( where /rrekursiv) Liste Ihrer alle Ihre Dateien .mkvvermeiden.mkvtmpDatei mitfindstr /v

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

3.Starten Sie das Zurücksetzen Ihrer Schleife errorlevelmit (call )// Kredit auf@aschipfl

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

4.errorlevelImplementieren Sie eine Funktion, bei der Sie als Parameter ( %~1 == %errorlevel%) auch die aktuelle Datei ( %~2 == %%~fA) übergeben können

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

5.Lassen Sie innerhalb dieser Funktion (Bezeichnung :^)) den Parameter errorlevel/ durch bedingte Bedingungen %1behandeln :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 

Beob.: 1Ersetzen Sie in Ihrem Code "%*cover.jpg"durch "%%~dpAcover.jpg"die for /f (or /R)Schleife . mkvmerge.exeLeider wird diese Zeichenfolge nicht übersetzt oder eine Datei basierend darauf ausgewählt.%*cover.jpg:

Obs.: 2Der letzte Befehl ( ren) ersetzt keine vorhandene Datei. Sie können versuchen, rensie durch zu ersetzen move /y, indem Sie den Zielnamen verwenden"%**.mkv" "%%~dpnA.mkv"

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

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

Zusätzliche Ressourcen:

verwandte Informationen