嗨希望你能解决我的问题,我已经使用vbs为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然后
KB2786081_Flag = "True"
ElseIf (InStr(strText, "KB2731771")) > 0 Then
KB2731771_Flag = "True"
ElseIf (InStr(strText, "KB2729094")) > 0 Then
KB2729094_Flag = "True"
ElseIf (InStr(strText, "KB2639308")) > 0 Then
KB2639308_Flag = "True"
ElseIf (InStr(strText, "KB2533623")) > 0 Then
KB2533623_Flag = "True"
ElseIf (InStr(strText, "KB2670838")) > 0 Then
KB2670838_Flag = "True"
End If
End If
loop
objFileToRead.Close
答案 0 :(得分:1)
我可能在今天遇到这个问题然后意识到我做了什么之后得到解决方案。
在我的代码中的某处,我使用instr
作为变量名,然后搞砸了InStr()
函数赋值,产生错误
Microsoft VBScript运行时(0x800A000D)
类型不匹配:'instr'
因为InStr
现在是String
而不是函数声明。
要解决问题,只需将我的变量分配更改为Dim in_str
。
通常你不能这样做,因为InStr()
是一个函数,如果我没有先声明instr
并试图将它分配给一个字符串会得到这个错误
Microsoft VBScript运行时(0x800A01F5)
非法转让:'instr'
只有在您首次声明instr
这样
'Key is this line without the declaration instr = "test"
'would fail with an Illegal assignment runtime error.
Dim instr
instr = "test"
'This line will trigger Type Mismatch error if instr has been declared.
If Instr(1, string1, string2) > 0 Then
...
End If
答案 1 :(得分:0)
试试这个
If (InStr(strText, "KB2786081",1)) > 0 Then
答案 2 :(得分:0)
为了找到自己的问题的解决方案,我稍微清理了一下脚本,以下内容在Windows 10上对我有用。(在没有strWin
和chr(34)
的情况下,基本上是相同的,其他一些小更改。我的计算机没有任何Windows更新,但如果出现问题,仍然会引发Type Mismatch错误):
Const ForReading = 1
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.run "cmd /c systeminfo > IE10_patches.txt", 0, True
strFile = "IE10_patches.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileToRead = objFSO.OpenTextFile(strFile, ForReading)
Do While Not objFileToRead.AtEndOfStream
strLine = objFileToRead.ReadLine
If Len(strLine) > 0 Then
strText = Trim(strLine)
wscript.echo strText
End If
If (InStr(strText, "KB2786081")) > 0 Then
KB2786081_Flag = "True"
ElseIf (InStr(strText, "KB2731771")) > 0 Then
KB2731771_Flag = "True"
ElseIf (InStr(strText, "KB2729094")) > 0 Then
KB2729094_Flag = "True"
ElseIf (InStr(strText, "KB2639308")) > 0 Then
KB2639308_Flag = "True"
ElseIf (InStr(strText, "KB2533623")) > 0 Then
KB2533623_Flag = "True"
ElseIf (InStr(strText, "KB2670838")) > 0 Then
KB2670838_Flag = "True"
End If
Loop
objFileToRead.Close
在搞砸这个过程中,我想起了我自己的instr
类型不匹配错误的原因。使用instr
时,如果要使用比较(0 = vbBinaryCompare(默认)或1 = vbTextCompare),则必须使用“开始”选项。因此,在此示例(和我的错误)中,以下内容:
If (InStr(strText, "KB2786081", 1))
需要为:
If (InStr(1, strText, "KB2786081", 1))
在这种情况下,只需将instr用作布尔值,也不需要> 0
。 (原始OP的脚本中也不需要。)