
코드를 작성했고 이를 내 아카이브에 사용하고 싶습니다. 개선하는 데 도움을 주셔서 감사합니다.
파일이 포함된 폴더는 다음과 같습니다(예).
폴더 있음 /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 /F
where /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"
추가 리소스: