파일을 MKV로 다중화할 때 내 배치 스크립트가 표지 JPG 이미지와 일치할 수 없습니다.

파일을 MKV로 다중화할 때 내 배치 스크립트가 표지 JPG 이미지와 일치할 수 없습니다.

코드를 작성했고 이를 내 아카이브에 사용하고 싶습니다. 개선하는 데 도움을 주셔서 감사합니다.

파일이 포함된 폴더는 다음과 같습니다(예).

폴더 있음 /S01, /s02, /s0n...

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

각 하위 폴더에는 해당 폴더의 모든 파일에 첨부하고 싶은 파일이 있지만 cover.jpg제대로 작동하도록 코드를 수정할 수 없습니다.

작성된 코드는 cover.jpg각 폴더의 를 식별할 수 없습니다.

코드는 다음과 같습니다.

@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

답변1

@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.당신은 필요SETLOCAL

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.모든 파일을 (재귀적으로) 나열 하여 바꾸 for /R십시오 .for /Fwhere /r.mkv.mkvtmp파일로findstr /v

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

삼.// 크레딧 errorlevel으로 루프 재설정을 시작하세요 .(call )@aschipfl

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

4.현재 파일( ) 을 errorlevel매개변수( )로 전달할 수 있는 함수를 구현합니다.%~1 == %errorlevel%%~2 == %%~fA

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

5.이 함수(label :^)) 내에서 errorlevel/ %1매개변수를 조건부 조건으로 처리하도록 합니다 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 

관찰: 1코드를 루프로 바꾸면 불행 "%*cover.jpg"하게도 이 문자열을 기반으로 파일을 번역하거나 선택하지 않습니다."%%~dpAcover.jpg"for /f (or /R)mkvmerge.exe%*cover.jpg:

관찰: 2마지막 명령( ren)은 기존 파일을 바꾸지 않습니다. 대상 이름을 사용하여 ren로 바꾸려고 시도할 수 있습니다.move /y"%**.mkv" "%%~dpnA.mkv"

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

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

추가 리소스:

관련 정보