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头的。