regex 在BGInfo文件中使用VBScript时出错,未找到错误

bbuxkriu  于 2023-02-25  发布在  其他
关注(0)|答案(3)|浏览(164)

我是一个业余的VB脚本编写者。
我正在创建一个脚本来输出ID。文件包含行“ad.annnet.id= 564654068”。需要输出“ID:小行星564654068

With New RegExp
    .Pattern = "\nID=(\d+)"
    Echo .Execute(CreateObject("Scripting.FileSystemObject").OpenTextFile("this.conf").ReadAll)(0).Submatches(0)
End With
mm9b1k5b

mm9b1k5b1#

脚本有多个问题,"找不到文件"错误的实际原因是@craig在their answer中指出的FileSystemObject无法定位文件"this. conf"。这是因为OpenTextFile()方法不支持相对路径,并期望文件的绝对路径,无论它是否与执行脚本在同一目录中。
您可以通过调用GetAbsolutePathName()并传入文件名来修复此问题。
Official Documentation - GetAbsolutePathName Method开始
假设当前目录是c:\mydocuments\reports,下表说明了GetAbsolutePathName方法的行为。
| 路径规范(JScript)|路径规范(VBScript)|返回路径|
| - ------|- ------|- ------|
| "c:"|"c:"|"c:\我的文档\报告"|
| "丙:..."|"丙:..."|"c:\我的文档"|
| "c:"|"c:"|"c:"|
| "c:*. \97年5月"|"c:. *\97年5月"|"c:\我的文档\报告 *. *\may97"|
| "区域1"|"区域1"|"c:\我的文档\报告\区域1"|
| "c:....\我的文档"|"c:....\我的文档"|"c:\我的文档"|
像这样的东西应该会起作用;

'Read the file from the current directory (can be different from the directory executing the script, check the execution).
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim filename: filename = "this.conf"
Dim filepath: filepath = fso.GetAbsolutePathName(filename)
Dim filecontent: filecontent = fso.OpenTextFile(filepath).ReadAll

更新:看起来你可以在OpenTextFile()中使用路径修饰符(谢谢你@LesFerch),所以这也应该可以工作;

'Read the file from the current directory (can be different from the directory executing the script, check the execution).
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim filename: filename = ".\this.conf" '.\ denotes the current directory
Dim filecontent: filecontent = fso.OpenTextFile(filename).ReadAll

另一个问题是当前的RegExp模式与您所期望的不匹配,建议首先使用类似Regular Expressions 101的东西来测试您的正则表达式。

js5cn81o

js5cn81o2#

在bginfo中,单击自定义新建,输入ID作为标识符,选中VB脚本文件单选按钮,然后单击浏览以选择使用以下代码保存的VBScript文件。然后将“ID”项添加到bginfo显示区域。注意:通过使用AppData环境变量引用AnyDesk数据文件,可以解决“未找到文件”错误。

Const ForReading = 1
Set oWSH = CreateObject("WScript.Shell")
Set oFSO = CreateObject("Scripting.FileSystemObject")
AppData = oWSH.ExpandEnvironmentStrings("%APPDATA%")
DataFile = AppData & "\AnyDesk\system.conf"
Set oFile = oFSO.OpenTextFile(DataFile,ForReading)
Do Until oFile.AtEndOfStream
  Line = oFile.ReadLine
  If InStr(Line,"ad.anynet.id") Then ID = Split(Line,"=")(1)
Loop
oFile.Close
Echo ID

请注意,数据通过一个或多个Echo语句返回到bginfo。如果在bginfo外部测试此脚本,请将Echo更改为WScript.Echo

bxgwgixi

bxgwgixi3#

如果输出为,则您将永远无法获得所需的值/显示
文件未找到
在指定文件路径之前,regexp是没有意义的。照此看来,"this. conf"文件必须与脚本本身位于同一位置--从错误中,我假设情况并非如此。

相关问题