如何用VBScript正则提取文件中两分隔符间内容(不含分隔符)
提取指定分隔符之间内容的VBS完整实现方案
嘿,看你在写人生中第一个VBS脚本,目标是从文件里抓两个标记之间的内容对吧?我帮你把脚本补全并优化好了,刚好能实现你想要的效果——从Test.txt里提取[extractSection]和[OthersSection]之间的所有行,而且完全不包含这两个分隔符本身,结果会存到Temp.txt里。
先给你完整的可运行代码:
Set objFS = CreateObject("Scripting.FileSystemObject") strFile = "E:\Temp\Test.txt" strTemp = "E:\Temp\Temp.txt" ' 先清理已存在的临时文件 If objFS.FileExists(strTemp) Then objFS.DeleteFile(strTemp) End If Set objSourceFile = objFS.OpenTextFile(strFile, 1) ' 1 = 只读模式 Set objTempFile = objFS.CreateTextFile(strTemp, True) ' True = 覆盖已有文件 blnExtract = False ' 标记是否进入提取区域 Do Until objSourceFile.AtEndOfStream strLine = objSourceFile.ReadLine() ' 检测起始分隔符,开启提取开关但不写入此行 If Trim(strLine) = "[extractSection]" Then blnExtract = True Continue Do ' 跳过当前行的后续处理 End If ' 检测结束分隔符,关闭提取开关但不写入此行 If Trim(strLine) = "[OthersSection]" Then blnExtract = False Continue Do ' 跳过当前行的后续处理 End If ' 如果处于提取状态,就把当前行写入临时文件 If blnExtract Then objTempFile.WriteLine(strLine) End If Loop ' 关闭文件,释放资源 objSourceFile.Close objTempFile.Close Set objSourceFile = Nothing Set objTempFile = Nothing Set objFS = Nothing WScript.Echo "提取完成!结果已保存到 " & strTemp
关键逻辑说明:
- 文件操作基础:用
Scripting.FileSystemObject来处理文件的创建、读取、删除,这是VBS里处理本地文件的标准方式 - 提取开关
blnExtract:这个布尔变量就像一个“闸门”——没遇到起始标记时闸门关闭,遇到后打开,直到遇到结束标记再关闭,只有闸门打开时才会把行写入目标文件 - 跳过分隔符行:遇到
[extractSection]和[OthersSection]时,只会切换开关状态,不会把这两行写入结果,完美符合你“不含分隔符”的要求 - Trim处理:用
Trim(strLine)是为了避免行首行尾有空格导致匹配失败,如果你的文件里分隔符行绝对没有多余空格,也可以去掉Trim
小提示:
- 如果你需要更换分隔符,只需要修改两个
If Trim(strLine) = "XXX"里的字符串就行 - 如果你的源文件里有多个相同的起始/结束标记,这个脚本会提取第一个起始到第一个结束之间的内容;要是需要处理多组区域,可以再调整循环逻辑
- 记得确保脚本有读写
E:\Temp目录的权限,不然会报错哦
内容的提问来源于stack exchange,提问作者ChrisR
相关产品推荐
相关产品推荐

