我想检查文件中的数据是否存在,是否存在数组数据。如果退出,它将返回1和0。我的文件里面是这样的:
2j2H4F6d9d0d3hdfasgt.y7
但是我删了最后两行。我的数组数据是这样的:[2w fr 5k 2j 0w]。我想检查文件中是否存在数组数据。
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
XX = 0
Set wshShell = CreateObject("WScript.Shell")
strFBString = wshShell.ExpandEnvironmentStrings("%FB%")
WScript.Echo "==>"
WScript.Echo "strFBString: " & strFBString
Set wshShell = Nothing
For i = 1 To Len(strFBString) Step 2
If StrComp(Mid(strFBString, i, 2), [2w fr 5k 2j 0w]) = 0 Then
XX = 1
End If
Next
WScript.Echo "XX: " & XX
WScript.Quit(XX)
答案 0 :(得分:1)
一方面,[2w fr 5k 2j 0w]
在VBScript中不是有效的数组定义。如果要使用这5个字符串元素定义数组,则需要这样做:
Array("2w", "fr", "5k", "2j", "0w")
此外,StrComp()
用于将一个字符串与另一个字符串进行比较。它不支持将字符串与数组进行比较。为了将字符串与数组的每个元素进行比较,您需要一个循环。但是,如何构建该循环取决于您要获得的结果。
看看您的代码,似乎您想在2j2H4...
中找到一个匹配项,而不是在w2j2H...
中找到一个匹配项,因此仅使用InStr()
可能对您不起作用。在这种情况下,您可以使用内部循环进行比较:
ref = Array("2w", "fr", "5k", "2j", "0w")
For i = 1 To Len(strFBString) Step 2
For Each s In ref
If Mid(strFBString, i, 2) = s Then
'...
End If
Next
Next
但是正如我已经说过的那样,细节取决于所需的最终结果。如果要检查输入字符串是否包含数组值的 any ,可以执行以下操作:
ref = Array("2w", "fr", "5k", "2j", "0w")
found = False
For i = 1 To Len(strFBString) Step 2
For Each s In ref
If Mid(strFBString, i, 2) = s Then
found = True
Exit For
End If
Next
Next
另一方面,如果您想检查输入字符串是否包含参考字符串的 all ,则可能会执行以下操作:
ref = Array("2w", "fr", "5k", "2j", "0w")
For Each s In ref
found = False
For i = 1 To Len(strFBString) Step 2
If Mid(strFBString, i, 2) = s Then
found = True
Exit For
End If
Next
If Not found Then Exit For
Next
您还可以使用完全不同的方法,例如将数据放入字典中。
data = CreateObject("Scripting.Dictionary")
For i = 1 To Len(strFBString) Step 2
data(Mid(strFBString, i, 2)) = True
Next
使用这种方法,您可以检查数据是否包含像这样的任何参考值:
found = False
For s In Array("2w", "fr", "5k", "2j", "0w")
If data.Exists(s) Then
found = True
Exit For
End If
Next
或检查数据是否包含所有像这样的参考值:
found = True
For s In Array("2w", "fr", "5k", "2j", "0w")
If Not data.Exists(s) Then
found = False
Exit For
End If
Next