PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

  回應
 
主題工具
workduck
Junior Member
 
workduck的大頭照
 

加入日期: Mar 2002
您的住址: 人不犯我,我不犯人
文章: 789
求助win10 批次檔迴圈

請問以下指令的迴圈批次檔要怎寫

我要利用mk程式去合併D槽內同資料夾內的MKV檔與同名SRT檔,以往都是複製貼上後
再一個一個修改,如果遇到集數多或是好幾季的影集,這個步驟就蠻浪費時間

想請教我要如何利用 迴圈指令 去依序變更 S01E01、S01E02、S01E03...S02E01、S02E02、S02E03.....


引用:

C:\mk.exe --output ^"E:\BME.S01E01.mkv^" --no-track-tags --me 1:Stereo ^"^(^" ^"D:\BME.S01E01.mkv^" ^"^)^" --lang文^" ^"^(^" ^"D:\BME.S01E01.srt^" ^"^)^" --trac:0
C:\mk.exe --output ^"E:\BME.S01E02.mkv^" --no-track-tags --me 1:Stereo ^"^(^" ^"D:\BME.S01E02.mkv^" ^"^)^" --lang文^" ^"^(^" ^"D:\BME.S01E02.srt^" ^"^)^" --trac:0
C:\mk.exe --output ^"E:\BME.S01E03.mkv^" --no-track-tags --me 1:Stereo ^"^(^" ^"D:\BME.S01E03.mkv^" ^"^)^" --lang文^" ^"^(^" ^"D:\BME.S01E03.srt^" ^"^)^" --trac:0
C:\mk.exe --output ^"E:\BME.S01E04.mkv^" --no-track-tags --me 1:Stereo ^"^(^" ^"D:\BME.S01E04.mkv^" ^"^)^" --lang文^" ^"^(^" ^"D:\BME.S01E04.srt^" ^"^)^" --trac:0
C:\mk.exe --output ^"E:\BME.S01E05.mkv^" --no-track-tags --me 1:Stereo ^"^(^" ^"D:\BME.S01E05.mkv^" ^"^)^" --lang文^" ^"^(^" ^"D:\BME.S01E05.srt^" ^"^)^" --trac:0
     
      
__________________
我在PCDVD的交易糾紛

特此感謝 ymo34005 網兄點名,並與大家分享他的金髮姊妹丼.
舊 2025-10-06, 04:17 PM #1
回應時引用此文章
workduck離線中  
ericshliao
Advance Member
 

加入日期: Aug 2004
文章: 334
mk.exe 是什麼, 你得先講一下. 不然沒辦法查參數怎麼下.
 
舊 2025-10-06, 05:21 PM #2
回應時引用此文章
ericshliao離線中  
workduck
Junior Member
 
workduck的大頭照
 

加入日期: Mar 2002
您的住址: 人不犯我,我不犯人
文章: 789
引用:
作者ericshliao
mk.exe 是什麼, 你得先講一下. 不然沒辦法查參數怎麼下.


感謝回覆

因為指令太長,為了能夠表達我想要表述的部分,所以將指令的部分裁切縮短 方便一行表示。

mk.exe 是 MKVToolNix 底下的 mkvmerge.exe

完整封裝一個影片+字幕的指令是這樣的

引用:
C:\Portable\MKVToolNixPortable\App\ProgramFiles64\mkvmerge.exe --ui-language zh_TW --priority lower --output ^"E:\BME.S01E01.mkv^" --no-track-tags --no-global-tags --language 0:und --display-dimensions 0:1920x1080 --language 1:ko --track-name 1:Stereo ^"^(^" ^"D:\BME.S01.2024\BME.S01E01.mkv^" ^"^)^" --language 0:zh-TW --track-name ^"0:繁體中文^" ^"^(^" ^"D:\BME.S01.2024\BME.S01E01.srt^" ^"^)^" --track-order 0:0,0:1,1:0
__________________
我在PCDVD的交易糾紛

特此感謝 ymo34005 網兄點名,並與大家分享他的金髮姊妹丼.

此文章於 2025-10-06 05:43 PM 被 workduck 編輯.
舊 2025-10-06, 05:38 PM #3
回應時引用此文章
workduck離線中  
ericshliao
Advance Member
 

加入日期: Aug 2004
文章: 334
問ChatGPT給的答案:

Skip to content
Open sidebar
You said:
Write a batch file for Windows. In all subdirectories, for each .mkv and .srt pair, run mk.exe.
ChatGPT said:
Here’s a Windows batch file that recursively searches through all subdirectories for .mkv and .srt files with matching base names, then runs your program mk.exe for each matching pair.

-----------------------------------------------------------
@echo off
setlocal enabledelayedexpansion

rem === Search recursively for all .mkv files ===
for /r %%A in (*.mkv) do (
set "mkvfile=%%~A"
set "basename=%%~nA"
set "folder=%%~dpA"
set "srtfile=!folder!!basename!.srt"

if exist "!srtfile!" (
echo Found pair:
echo MKV: !mkvfile!
echo SRT: !srtfile!
echo Running mk.exe...
mk.exe "!mkvfile!" "!srtfile!"
echo.
)
)

echo Done.
pause
🧩 How it works
for /r %%A in (*.mkv) — recursively finds all .mkv files.

For each .mkv, it:

Extracts the base name (%%~nA).

Constructs the .srt file path using the same folder and base name.

Checks if that .srt exists.

If yes, runs:

mk.exe "full\path\to\file.mkv" "full\path\to\file.srt"
Outputs progress to the console.

💡 Optional improvements
If you want to redirect mk.exe output to a log file:

mk.exe "!mkvfile!" "!srtfile!" >> "mk_log.txt" 2>&1
If mk.exe is not in PATH, specify the full path:

"C:\path\to\mk.exe" "!mkvfile!" "!srtfile!"
Would you like it to skip already processed pairs (e.g., if output exists or logged), or just process everything each time?



No file chosenNo file chosen
舊 2025-10-06, 05:43 PM #4
回應時引用此文章
ericshliao離線中  
workduck
Junior Member
 
workduck的大頭照
 

加入日期: Mar 2002
您的住址: 人不犯我,我不犯人
文章: 789
引用:
作者ericshliao
問ChatGPT給的答案:

Skip to content
Open sidebar
You said:
Write a batch file for Windows. In all subdirectories, for each .mkv and .srt pair, run mk.exe.
ChatGPT said:
Here’s a Windows batch file that recursively searches through all subdirectories for .mkv and .srt files with matching base names, then runs your program mk.exe for each matching pair.

-----------------------------------------------------------
...


我倒是忘了 還可以利用AI 去幫我寫,感謝~
__________________
我在PCDVD的交易糾紛

特此感謝 ymo34005 網兄點名,並與大家分享他的金髮姊妹丼.
舊 2025-10-06, 05:46 PM #5
回應時引用此文章
workduck離線中  
小薪
Advance Member
 
小薪的大頭照
 

加入日期: Dec 2005
您的住址: 台灣台北
文章: 428
引用:
作者workduck
我倒是忘了 還可以利用AI 去幫我寫,感謝~

用AI協助的話,還是要注意語法的細節有沒有給錯,然後再修正.
__________________
小薪的GMail:
小薪的LINE:
小薪是公的不是母的
舊 2025-10-06, 11:15 PM #6
回應時引用此文章
小薪離線中  
a9607
Master Member
 
a9607的大頭照
 

加入日期: Oct 2001
文章: 2,271
引用:
作者workduck
請問以下指令的迴圈批次檔要怎寫

我要利用mk程式去合併D槽內同資料夾內的MKV檔與同名SRT檔,以往都是複製貼上後
再一個一個修改,如果遇到集數多或是好幾季的影集,這個步驟就蠻浪費時間

想請教我要如何利用 迴圈指令 去依序變更 S01E01、S01E02、S01E03...S02E01、S02E02、S02E03.....


這個套兩層 for 迴圈 ,一層季別一層集數 應該就可以解決了

__________________
超準的星座分析!
舊 2025-10-07, 02:09 AM #7
回應時引用此文章
a9607離線中  
ghostcode
Senior Member
 

加入日期: Sep 2001
您的住址: 淡水
文章: 1,284
我曾在 PTT 回過幾次類似的。

當然現在有 chatgpt 可以問。但不一定每次都正確。

只是頭腦真的會打結。若要考慮複雜的情況,或目錄有特殊字元等都很麻煩。

現在 powershell core (就是 7.5 後那版)很方便,也可以免安裝。
舊 2025-10-07, 06:42 AM #8
回應時引用此文章
ghostcode離線中  
bebo1210
Senior Member
 
bebo1210的大頭照
 

加入日期: May 2002
您的住址: 陣亡者的靈堂
文章: 1,070
如果是由種子途徑得來的檔案,個人不建議變更原檔案的內容,一則是若繼續作種,檔案體積加倍(原檔+變更檔),二則是若刪除原檔,變更檔與原檔不一致,也無繼續作種可能。
個人作法是建立影音伺服器,不需要整併影音與字幕檔,只要兩者為同一命名,且後者加後綴default,即便原MKV裡設定了以其他語言為預設字幕,外掛字幕優先權大於MKV預設,在影音伺服器便會選擇default檔案。
在BT程式設定與影音伺服器相同路徑,可同時作種。
如果MKV已內建你要的字幕,用MKV相關程式(gMKVExtractGUI)並在其內設定抽取後的檔案名稱(同檔名+default後綴),影音伺服器即可辨識。
若是影集字幕檔與影集名稱只有部分相同(如影集名),可以用WIN內建或批次更改檔名程式來處理。
個人使用的影音伺服器是Jellyfin。
舊 2025-10-08, 08:42 AM #9
回應時引用此文章
bebo1210現在在線上  
substar999
Master Member
 

加入日期: Sep 2001
您的住址: K
文章: 1,504
其實不用跑迴圈,先用EXCEL批次產生大量指令文字,
再將產生的指令文字複製到BAT檔案內執行就好,這樣單純得多
舊 2025-10-08, 12:07 PM #10
回應時引用此文章
substar999離線中  


    回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是02:56 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。