
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.jpg
que 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.jpg
en 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 /R
con (recursivamente) una lista for /F
de where /r
todos sus archivos .mkv
que debe evitar.mkvtmp
presentar confindstr /v
for /f tokens^=* %%A IN ('where /r . *.mkv^|%__AppDir__%findstr.exe/vei mkvtmp
3.Comience su bucle reiniciando errorlevel
con (call )
// crédito a@aschipfl
... ')Do (call ) &<con: ...
4.Implemente una función, donde pueda pasar el archivo actual errorlevel
como 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 %1
condicionales :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.exe
desafortunadamente 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 ren
usando move /y
el 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: