Vbscript 使用Instr的类型不匹配

Vbscript 使用Instr的类型不匹配,vbscript,internet-explorer-10,packaging,wsh,Vbscript,Internet Explorer 10,Packaging,Wsh,您好,希望您能帮助我解决我的问题,我已经使用vbs for IE10创建了一个包,该包将检查计算机上是否安装了修补程序,如果缺少一个修补程序/更新,脚本将中止安装并记录返回代码 我这里有一个代码,用于检查安装在计算机上的修补程序,但我仍然得到错误类型与使用“Instr”不匹配 $---------------------------------- 检查已安装的修补程序 ---------------------------------- objShell.run "cmd /c " &a

您好,希望您能帮助我解决我的问题,我已经使用vbs for IE10创建了一个包,该包将检查计算机上是否安装了修补程序,如果缺少一个修补程序/更新,脚本将中止安装并记录返回代码

我这里有一个代码,用于检查安装在计算机上的修补程序,但我仍然得到错误类型与使用“Instr”不匹配

$---------------------------------- 检查已安装的修补程序 ----------------------------------

    objShell.run "cmd /c " & chr(34) & "systeminfo >" & strWin & "\Temp\IE10_patches.txt" & chr(34), 0, True

    msgbox strWin & "\Temp\IE10_patches.txt"
    strFile = strWin & "\Temp\IE10_patches.txt"

    WScript.Sleep 5000

    Const ForReading = 1

    Set objFileToRead = objFSO.OpenTextFile(strFile, ForReading)


    Do Until objFileToRead.AtEndOfStream
            strLine = objFileToRead.ReadLine

            If Len(strLine) > 0 Then 
            strText = Trim(strLine)

            'strLen = Len(strLine)
            'msgbox strLen
            'MSGBOX strLine

            'ctr =  ctr+ 1
            'MSGBOX ctr 
在此处获取错误->如果(InStr(strText,“KB2786081”)>0则

试试这个

If (InStr(strText, "KB2786081",1)) > 0 Then

今天我自己有了这个问题,然后意识到我做了什么,我可能会有解决办法

在我的代码中的某个地方,我使用了
instr
作为变量名,然后将
instr()
函数赋值搞砸了,产生了错误

Microsoft VBScript运行时(0x800A000D)
类型不匹配:“instr”

因为
InStr
现在是
String
而不是函数声明

要解决此问题,只需将变量赋值更改为\u str中的
Dim

通常您不能这样做,因为如果我没有首先声明
InStr
并尝试将其分配给字符串,则
InStr()
是一个函数,将出现此错误

Microsoft VBScript运行时(0x800A01F5)
非法转让:“instr”

只有当您首先像这样声明
instr
时,才会发生这种情况

”键是不带instr=“test”声明的此行
'将失败,并出现非法分配运行时错误。
暗仪表
instr=“测试”
'如果已声明instr,此行将触发类型不匹配错误。
如果指令(1,string1,string2)>0,则
...
如果结束

为了找到解决我自己问题的方法,我对脚本进行了一些清理,以下内容在Windows 10上适用。(没有
strWin
chr(34)
和其他一些小改动,基本上是一样的。我的计算机不会有任何windows更新,但如果出现问题,仍然会抛出类型不匹配错误):

在处理这个问题的过程中,我想起了我自己的
instr
类型不匹配错误的原因。使用
instr
时,如果要使用比较(0=vbBinaryCompare(默认)或1=vbTextCompare),则必须使用开始选项。因此,在本例中(以及我的错误),如下所示:

If (InStr(strText, "KB2786081", 1))
需要:

If (InStr(1, strText, "KB2786081", 1))

在这种情况下,仅将instr用作布尔值时,也不需要使用
>0
。(在最初的OP脚本中也不需要它。)

嗯。你的代码对我来说很好。
If
语句周围的额外参数是不需要的,但它们不会损害任何东西。Hi-Bond代码仍然不起作用,但我找到了另一个解决方案,效果很好。我把仪器换成了InstrRev,我不知道这在将来是否会有问题。谢谢,这太疯狂了
InStrRev()
InStr()
都接受两个字符串,所以我不确定为什么一个可以工作,而另一个不行。您是否尝试过将所有参数指定给
InStr()
--
InStr(1,strText,“KB1234567”,vbTextCompare)
?@Bond我可能有答案,因为我今天愚蠢地遇到了这个问题,然后意识到我声明了一个变量
Dim InStr
,并为它分配了一个字符串,这显然对调用
InStr()
函数的任何地方都有影响。重命名变量解决了问题,我甚至没有考虑过它当时有
Dim instr,outler
用于输入和输出字符串,确实犯了愚蠢的错误。这并没有提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。谢谢Justin。下次我会小心的。仍然不工作,测试操作系统可能有问题。谢谢我仍然想知道为什么Instr给我类型不匹配的错误,虽然我把它改为InstrRev,工作正常。
If (InStr(strText, "KB2786081", 1))
If (InStr(1, strText, "KB2786081", 1))