Sql server 从VBScript中的文本\属性文件中提取用户名\密码

Sql server 从VBScript中的文本\属性文件中提取用户名\密码,sql-server,file,text,vbscript,Sql Server,File,Text,Vbscript,我试图从属性文件中提取用户名、密码、sqlServer等字段的值。它可以像文本文件一样读取。 文件格式如下: 因此,我基本上使用了InStr()函数来查找字段的位置(例如用户名)。然后跳过实际密码的起始位置,并将其读入变量,直到找到换行符为止 以下是示例代码: ... Posusername = instr(1,strFile,"username",vbTextCompare) 'Wscript.Echo "Position of Username is: "&Posusername

我试图从属性文件中提取用户名、密码、sqlServer等字段的值。它可以像文本文件一样读取。 文件格式如下:

因此,我基本上使用了InStr()函数来查找字段的位置(例如用户名)。然后跳过实际密码的起始位置,并将其读入变量,直到找到换行符为止

以下是示例代码:

...

Posusername = instr(1,strFile,"username",vbTextCompare)
'Wscript.Echo "Position of Username is: "&Posusername
Set ObjFile = ObjFso.openTextFile(StrFileName)
Objfile.skip(posusername-1)
Objfile.skip(9) 
    Do until objFile.AtEndOfLine
    Username = ObjFile.Readline
Loop
ObjFile.close
...
现在,这段代码在提取sqlServer、密码等时运行良好,但对于用户名来说却出人意料。。它只存储下一行,即abcd.Password=Password变量username 可能出了什么问题?请帮忙

替代方法

Do Until oTS.AtEndOfStream
sLine =Trim( oTS.ReadLine )
if "" <> sLine Then
    If "abcd.user" = Left(Trim(sLine), 9 ) Then
        username1=Split(sline,"=")
        Exit Do
    end if
end if
loop
username=Trim(username1(1))
msgbox "Username - " & username
Do直到oTS.AtEndOfStream
sLine=修剪(oTS.ReadLine)
如果“sLine”那么
如果“abcd.user”=左侧(修剪(sLine),9),则
username1=Split(sline,“=”)
退出Do
如果结束
如果结束
环
username=Trim(username1(1))
msgbox“用户名-”&用户名

这种方法很有效。但这只有在我知道文件的确切结构时才适用。如果我正在读取的文件中有一些更改怎么办?

使用
regexp

Function testRegexP(strFile, FieldName)
    Set re = New RegExp
    re.Pattern = "\." + FieldName + "="
    Set matches = re.Execute(strFile)
    If matches.Count > 0 Then
        Set match = matches(0)
        msg = "Found match """ & match.Value & _
              """ at position " & match.FirstIndex & vbCRLF
        msgbox msg
        testRegexP = match 
    Else
        msgbox "No match"
        testRegexP = "Nothing"
    End If
End Function
FieldName
是您试图查找的字段;e、 g.“用户名”。您可以遍历要查找的字段列表,并为每个字段应用函数:

Dim upBound = 5
Dim fieldList(5)
fieldList(0) = "Username"
fieldList(1) = "Password"
fieldList(2) = "IP"
For i = 0 to ( upBound - 1 ) Step 1
    testRegexP(strFile, fieldList(i))
Next 
编辑1:

如果您想用键存储找到的值,可以使用字典;在主代码中定义如下字典:

Dim fieldDic 
Set fieldDic = CreateObject("Scripting.Dictionary")
您还应该如下更改
For
语句,以存储函数
testRegexP
返回的值:

Dim x
Dim fx 
For i = 0 to ( upBound - 1 ) Step 1
    x = fieldList(i)
    fx = testRegexP(strFile, x)
    fieldDic.Add x, fx
Next 

提取信息的其他一些逻辑或代码也是同样的方法,但我如何将这些文件的值存储在特定变量中,例如,USERNAME的值应该存储在变量Dim USERNAME中。另外,我是VbScriptingReview我的答案的新手@Anantvaibhav。出现了一个错误未定义类:“列表”。有什么声明吗?抱歉@Anantvaibhav,我对你的问题有点误解;我已经更新了整个答案。请检查。新代码是无错误的@Zeinab,但当我回显FieldDic时,弹出ablank Msg框,这意味着此FiledDic(0)、FiledDic(1)、FiledDic(2)中的值为空。看,我有我想要找到的文件的位置。它们绝对正确。但是,我如何抓取字段前面写的内容呢?文件的结构正如问题所示
Dim x
Dim fx 
For i = 0 to ( upBound - 1 ) Step 1
    x = fieldList(i)
    fx = testRegexP(strFile, x)
    fieldDic.Add x, fx
Next