bat 如何搜尋多種檔案?

@echo off & cd/d "%~dp0"
for /r "%~dp1" %%i in (*.ass;*.ssa;*.srt;*.txt) do (
copy /y "%%~i" "%~dp0\tempsub.txt"
set Filters=-vf subtitles=tempsub.txt
goto break
)
:break

bat 如何搜尋多種檔案? (不包含子資料夾)
for /d (set) 無法使用多種檔案
請各位前輩賜教
2013-12-03 2:06 發佈
文章關鍵字 bat 檔案
kingdragon wrote:
copy /y "%%~i" "%~dp0\tempsub.txt"


你的用途,很奇怪。我看不是很懂。
照你這樣寫,如果有兩個 txt 檔,分別是 1.txt 和 2.txt
最後,tempsub.txt 的內容,會和 2.txt 一樣
更正確來講,你把 1.txt 複製成 tempsub.txt,又把 2.txt 複製成 tempsub.txt,copy 你又下了 /y
所以 tempsub.txt(原 2.txt) 又會把 tempsub.txt(原 1.txt) 覆蓋

若要搜尋多檔案類型,可以用 dir *.txt *.srt。

kingdragon wrote:
@echo off & cd/d "%~dp0"
for /r "%~dp1" %%i in (*.ass;*.ssa;*.srt;*.txt) do (
copy /y "%%~i" "%~dp0\tempsub.txt"
set Filters=-vf subtitles=tempsub.txt
goto break
)
:break

寫的怪怪的.
☆ 私人訊息直接刪除不再回覆 ☆ 願望 : bovuhPPjMnEfkyhggnsJdABaLFPuhXT4
John wrote:
你把 1.txt 複製成 tempsub.txt,又把 2.txt 複製成 tempsub.txt

只會複製一次,接著 goto break 直接跳出迴圈
因為我只需要一個字幕檔,優先順序 ass > ssa > srt > txt
而這些字幕檔本來就是純文字,副檔名並不影響 所以統一為 tempsub.txt

John wrote:
你的用途,很奇怪。我看不是很懂。

我是要把字幕給 FFmpeg 掛載,而 FFmpeg 要掛載的字幕必須在 %dp0 底下

ffmpeg.exe -i "%~1" -c:a libvo_aacenc -vbr 4 -ac 2 -strict -2 -vf subtitles=tempsub.txt -c:v libx264 -profile:v high -preset ultrafast -x264opts crf=18:ref=4:bframes=5 "%~dpn1.recode.mp4"

%1 是 MKV MP4 等媒體檔,然後複製相同路徑下的1個字幕檔至 %dp0
不過字幕檔應該要影片同檔名才對,否則會複製到不相干的字幕

move1.mkv
move1.cht.ass
move2.mkv
move2.chs.ass

--------------------------------

雖然找到解決方法了,打了好多重複的字串,有沒有比較精簡的寫法?

for /r "%~dp1" %%i in ("%~n1*.ass";"%~n1*.ssa";"%~n1*.txt";"%~n1*.srt") do (
copy /y "%%~i" "%~dp0\tempsub.txt"
goto break
)
:break

--------------------------------

很神奇的一點,眾多 FFmpeg 的 GUI 居然沒有一個有做出掛載字幕的選項
原本是想用 C# 自己做一個簡單的 GUI
想說參數都是用那幾個,寫 BAT 就可以搞定了
因為有些播放設備不支援 softsub,所以只能做成 hardsub
是不是比較精簡,我不敢保證。

我乾脆不指定檔案類型,而改以檔案大小來做判斷,理論上,字幕檔應該會小於 1MB
所以,如果檔案大小小於 1048576,就複製這個字幕檔

for /r "%~dp1" %%i in ("%~n1*") do (
if %%~zi lss 1048576 (
copy /y "%%~i" "%~dp0tempsub.txt"
goto break)
)

結果:
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?