You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBScript文件搜索函数无法匹配日期字符串问题排查

VBScript搜索日期格式字符串无结果的问题排查

嘿,我来帮你捋捋这个问题!你说的这种情况——搜普通单词没问题,但搜22-03-2017这类带减号的日期就没结果,大概率是特殊字符处理或者文件读取编码出了幺蛾子,我给你拆解下常见的坑和解决办法:

最可能的原因1:正则表达式把减号当成了特殊符号

如果你的脚本里用了RegExp对象做搜索(很多VBScript搜索脚本会这么干),那麻烦就来了:-在正则语法里是范围限定符(比如a-z表示a到z的字母),直接写22-03-2017会被正则解析成错误的范围规则,自然匹配不到任何内容。

解决办法:转义减号

把输入的搜索字符串里的-替换成\-,让正则把它当成普通字符处理:

Dim regEx, searchStr
searchStr = InputBox("Please enter the value to search")
Set regEx = New RegExp
regEx.Pattern = Replace(searchStr, "-", "\-") ' 转义所有减号
regEx.Global = True
regEx.IgnoreCase = True

' 后续用regEx.Test(文件内容)判断是否匹配

可能的原因2:文件编码不匹配导致字符识别错误

如果你的脚本用了OpenTextFile读取文件,但没指定编码,VBScript默认会用ANSI编码读取。要是你的.txt文件是UTF-8(尤其是带BOM的),那读取出来的内容里可能会有乱码,自然找不到目标日期字符串。

解决办法:指定UTF-8编码读取文件

调用OpenTextFile时加上编码参数-1(代表UTF-8):

Set objFile = objFSO.OpenTextFile(filePath, 1, False, -1) ' 最后一个参数-1是UTF-8编码
fileContent = objFile.ReadAll
objFile.Close

' 用InStr做纯文本搜索
If InStr(fileContent, searchStr) > 0 Then
    WScript.Echo "找到匹配:" & filePath
End If

其他小概率坑

  • 要是你用ReadLine逐行读取,刚好目标日期跨行了(比如换行符插在了22-03-2017之间),那也会搜不到——这种情况换成ReadAll读取整个文件内容就好。
  • 检查下脚本里有没有不小心加了大小写敏感的限制(不过日期都是数字和符号,这个概率很低)。

如果你的完整代码还有其他逻辑,可以贴出来再细化排查,但目前这两个场景是最常见的原因啦!

内容的提问来源于stack exchange,提问作者abnv

火山引擎 最新活动