vtt文件转换成srt文件脚本

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


以上是一段VBScript脚本

作用:将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头的。


你可能感兴趣的:(批量修改文件内容)