Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
set dir=fso.GetFolder(".")
fileType = "vtt"
newFileType = "srt"
For Each f In dir.Files
fname = f.name
dotIn = InStrRev(fname,".")
strLen = Len(fname)
endwith = Right(fname, strLen-dotIn)
if endwith = fileType then
Call convert2AnothorFile(dir,fname,newFileType)
End if
Next
Wscript.Echo "完成"
function convert2AnothorFile(dir,fileName,fileType)
Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
Set re = New RegExp
Set dotIn=Nothing
Dim s, r
dotIn = InStrRev(fname,".")
newFile = Left(fname,dotIn)&fileType
Set r = fso.CreateTextFile(newFile,true,true)
s = LoadFile(dir+"\"+fileName)
'msgBox s
re.Pattern = "(:)([0-9]{2})([/.]{1})([0-9]{3})"
re.Global = True
s=re.Replace(s, "$1$2,$4")
r.write s
r.close
End Function
Function LoadFile(Path)
Dim stm
Set stm = CreateObject("ADODB.Stream")
stm.Type = 2
stm.Mode = 3
stm.Open
'Wscript.Echo path
stm.LoadFromFile Path
stm.Charset = "UTF-8"
'stm.Charset = "Unicode"
'stm.Charset = "GB2312"
stm.position = 0
LoadFile=stm.ReadText()
'Wscript.Echo LoadFile
stm.Close
Set stm = Nothing
End Function
Wscript.quit
作用:將vtt字幕文件替換爲srt字幕文件。主要是將文件中,毫秒前的點號改成逗號。
用法:在vtt文件所在的文件夾下,新建一個文本文件,粘貼以上代碼,保存。然後將文件後綴改成vbs,雙擊文件即可。
範圍:當前文件夾,不包含子文件夾
平臺:windows系統 win7
原理:使用正則表達式全局替換
缺陷:每個文件一次加載到內存中,緊適合於小的文件。vtt需要是有BOM的格式纔可以,不然LoadFile=stm.ReadText()這一行會報參數錯誤。
擴展:可以稍作修改,能用於批量修改其他文本文件內容。
效果:親測可用
介紹:本人對VB不熟悉,網上沒有現成的代碼。經過一個晚上從入門到折騰,才寫出這樣的腳本,有熟悉vb的,或知道更好寫法的朋友可以留言。
吐槽:Linux下就一條命令的事情,在windows下卻要搞這麼多事情。
正則表達式很醜,想用簡短點的式子,但是系統不支持,VB版本太低。
優點:Windows平臺不用裝其他軟件
使用中的bug:
1. 亂碼。亂碼可以修改一下stm.Charset = "UTF-8"的值,單引號“‘”在vb中是註釋。可選值有 "UTF-8" "Unicode" "GB2312" "ANSI"等。
2. LoadFile=stm.ReadText()這一行報錯,可能是讀取的文件是空文件。
3. 文件開頭多幾個字符,stm.position = 0這裏修改一下數值,數值幾就表示跳過文件幾個字符。多的字符其實就是BOM頭,轉換後的文件是不帶BOM頭的。