-1

OK、バッチビデオ処理を行おうとしています。5ではなく単一のバッチファイルに凝縮したいのですが、外部の.batファイルに渡すのと同じように変数を内部関数に渡すことができません。 。

これが私の「オールインワン」バージョンです

mkdir new

mkdir new\fonts

forfiles /M *.mkv /C "cmd /c call :mkvextract @file @fname" >> log.txt 2>&1

forfiles /M *.mkv /C "cmd /c call :mkvmerge @file" >> merge.txt 2>&1

forfiles /M *.mkv /C "cmd /c call :makeavs @file @fname" >> log.txt 2>&1

forfiles /M *.mkv /C "cmd /c call :getfonts @file @fname" >> fonts.txt 2>&1

forfiles /M *.ttf /C "cmd /c call :movefonts @file" >> fonts.txt 2>&1

forfiles /M *.TTF /C "cmd /c call :movefonts @file" >> fonts.txt 2>&1

forfiles /M *.otf /C "cmd /c call :movefonts @file" >> fonts.txt 2>&1

forfiles /M *.OTF /C "cmd /c call :movefonts @file" >> fonts.txt 2>&1

:mkvextract

"C:\Program Files (x86)\MKVToolNix\mkvextract.exe" --ui-language en tracks "%~1" 2:"%CD%\new\%~2_track3_eng.ass"

goto :EOF

:mkvmerge

set mkvorig=%CD%\%~1
set mkvorig=%mkvorig:\=\\%

set mkvnew=%CD%\new\%~1
set mkvnew=%mkvnew:\=\\%

"C:\Program Files (x86)\MKVToolNix\mkvmerge.exe" -o "%mkvnew%"  "--language" "0:jpn" "--default-track" "0:yes" "--forced-track" "0:no" "--display-dimensions" "0:1920x1080" "--language" "1:jpn" "--default-track" "1:yes" "--forced-track" "1:no" "-a" "1" "-d" "0" "--no-attachments" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "%mkvorig%" ")" "--track-order" "0:0,0:1"

goto :EOF

:makeavs

echo Directshowsource("new\%~1") >"new\%~2.avs"
echo textsub("new\%~2_track3_eng.ass") >>"new\%~2.avs"

goto :EOF

:getfonts

"C:\Program Files (x86)\MKVToolNix\mkvextract.exe" attachments "%~1" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

goto :EOF


:movefonts

move %~1 new\fonts

goto :EOF

「5つの.batファイル」バージョンは次のとおりです。

mkdir new

mkdir new\fonts

forfiles /M *.mkv /C "cmd /c mkvextract.bat @file @fname" >> log.txt 2>&1

forfiles /M *.mkv /C "cmd /c mkvmerge.bat @file" >> merge.txt 2>&1

forfiles /M *.mkv /C "cmd /c makeavs.bat @file @fname" >> log.txt 2>&1

forfiles /M *.mkv /C "cmd /c getfonts.bat @file @fname" >> fonts.txt 2>&1

forfiles /M *.ttf /C "cmd /c movefonts.bat @file" >> fonts.txt 2>&1

forfiles /M *.TTF /C "cmd /c movefonts.bat @file" >> fonts.txt 2>&1

forfiles /M *.otf /C "cmd /c movefonts.bat @file" >> fonts.txt 2>&1

forfiles /M *.OTF /C "cmd /c movefonts.bat @file" >> fonts.txt 2>&1

関数呼び出しを正しく実行しているかどうかはよくわかりませんが、ここで見つけたものをベースに正しく表示されます:http: //batcheero.blogspot.com/2007/07/function-call-in-batch.html

4

1 に答える 1

2

forfilesによって実行されるコマンドは、まったく新しいCMD.EXEセッション内にあります。これらはマスターバッチコンテキストに存在しないため、マスターバッチスクリプト内でサブルーチンを呼び出すことはできません。

マスタースクリプトを再構築して、それ自体を呼び出し、ルーチンの名前を引数として渡すことができます。ラベルが存在する場合、スクリプトはそのラベルをGOTOできます。

最初のスクリプトにも、最初のサブルーチンの前にEXIT / BまたはGOTO:EOFがありませんでした。

中間ディレクトリを作成する必要はありません。直接作成することができnew\fontsnewまだ存在しない場合は作成されます。

@echo off

:: If first argument is a valid label then GOTO that label
if "%~1" neq "" findstr /bc:":%~1" "%~f0" >nul && (
  shift /1
  goto %~1
)

::Main program
if not exist new\fonts mkdir new\fonts
forfiles /M *.mkv /C "cmd /c "%~f0" mkvextract @file @fname" >> log.txt 2>&1
forfiles /M *.mkv /C "cmd /c "%~f0" mkvmerge @file" >> merge.txt 2>&1
forfiles /M *.mkv /C "cmd /c "%~f0" makeavs @file @fname" >> log.txt 2>&1
forfiles /M *.mkv /C "cmd /c "%~f0" getfonts @file @fname" >> fonts.txt 2>&1
forfiles /M *.ttf /C "cmd /c "%~f0" movefonts @file" >> fonts.txt 2>&1
forfiles /M *.TTF /C "cmd /c "%~f0" movefonts @file" >> fonts.txt 2>&1
forfiles /M *.otf /C "cmd /c "%~f0" movefonts @file" >> fonts.txt 2>&1
forfiles /M *.OTF /C "cmd /c "%~f0" movefonts @file" >> fonts.txt 2>&1
exit /b

:mkvextract
"C:\Program Files (x86)\MKVToolNix\mkvextract.exe" --ui-language en tracks "%~1" 2:"%CD%\new\%~2_track3_eng.ass"
exit /b

:mkvmerge
set mkvorig=%CD%\%~1
set mkvorig=%mkvorig:\=\\%
set mkvnew=%CD%\new\%~1
set mkvnew=%mkvnew:\=\\%
"C:\Program Files (x86)\MKVToolNix\mkvmerge.exe" -o "%mkvnew%"  "--language" "0:jpn" "--default-track" "0:yes" "--forced-track" "0:no" "--display-dimensions" "0:1920x1080" "--language" "1:jpn" "--default-track" "1:yes" "--forced-track" "1:no" "-a" "1" "-d" "0" "--no-attachments" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "%mkvorig%" ")" "--track-order" "0:0,0:1"
exit /b

:makeavs
echo Directshowsource("new\%~1") >"new\%~2.avs"
echo textsub("new\%~2_track3_eng.ass") >>"new\%~2.avs"
exit /b

:getfonts
"C:\Program Files (x86)\MKVToolNix\mkvextract.exe" attachments "%~1" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
exit /b

:movefonts
move %~1 new\fonts
exit /b
于 2012-10-17T22:34:05.170 に答える