2012-10-17 74 views
-1

好吧,所以即時嘗試做批量視頻處理,我想它凝結到一個單一的批處理文件,而不是5,但我不能夠通過變量內部功能相同我會將它們傳遞給外部.bat文件。Windows批處理腳本內部函數傳遞變量

我的繼承人「都在一個」版本

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 

「五個.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

回答

2

forfiles執行的命令在一個全新的CMD.EXE會話中。它們不再位於您的主批處理上下文中,因此您無法在主批處理腳本中調用子例程。

您可以重構您的主腳本以調用自身,並將該例程的名稱作爲參數傳遞。如果標籤存在,您的腳本可以轉到該標籤。

您的第一個腳本在第一個子程序之前還缺少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 
+0

我仍然得到錯誤這樣的: 錯誤:(mkvextract)文件「mkvextract」無法讀取(無錯誤)被打開。 像它沒有正確調用這些函數 –

+0

也這樣,我的變量@文件和@文件名。例如,avs文件現在讀取'Directshowsource(「C:\ Users \ ColbyB \ Desktop \ batch \ new \ ED1.mkv」)'textsub(「C:\ Users \ ColbyB \ Desktop \ batch \ new \ makeavs_track3_eng。屁股「) 具體而言,我認爲你已經採取了%〜1,並將其應用於其他東西...我用這些作爲文件和%〜2作爲fname。這些文件是MKV和字體。 –

+1

通過將我以前的%〜1改爲%〜2和%〜2改爲%〜3,我得到了它的工作,謝謝! –