
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.jpg
einzelnen 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 /R
durch for /F
( where /r
rekursiv) Liste Ihrer alle Ihre Dateien .mkv
vermeiden.mkvtmp
Datei mitfindstr /v
for /f tokens^=* %%A IN ('where /r . *.mkv^|%__AppDir__%findstr.exe/vei mkvtmp
3.Starten Sie das Zurücksetzen Ihrer Schleife errorlevel
mit (call )
// Kredit auf@aschipfl
... ')Do (call ) &<con: ...
4.errorlevel
Implementieren 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 %1
behandeln :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.exe
Leider 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, ren
sie 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: