我试图弄清楚为什么我会为下面的代码收到此错误。我在网上搜索了可能的原因,但我无法找到。请看一下:
Dim descr, code
If WScript.Arguments.Count = 0 Then
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", Chr(34) & Script.ScriptFullName Chr(34) & " Run", , "runas", 1
Else
descr = InputBox("restore point description","Crepo")
If (descr) Then
code = GetObject("winmgmts:\\.root default:Systemrestore").CreateRestorePoint (descr, 0, 100)
If (code) Then
Msgbox "System Restore Point not created (" & code & ") !", 48, "Crepo"
Else
Msgbox "System Restore Point successfully created", 64, "Crepo"
End If
End If
End If
在运行时,如果我输入任何内容,即qwerty
,我会收到此错误:
行:8
Char:2
错误:类型不匹配:' [字符串:" qwerty"]'
代码:800A000D
根据我的研究,InputBox
的返回类型为string
,CreateRestorePoint
的第一个参数也为string
。事实上,如果我直接将InputBox
称为参数,它就可以工作。
答案 0 :(得分:1)
If子句需要一个布尔值(不是字符串):
>> descr = "qwerty" >> If (descr) Then WScript.Echo "nonsense" >> Error Number: 13 Error Description: Type mismatch
InputBox返回一个字符串或一个空值(参见here),但从不为空。
答案 1 :(得分:0)
而不是If (descr) Then
尝试If (Not IsNull(descr)) Then
。
你可能也想检查空字符串:If (Not IsNull(descr) and descr <> "") Then
。事实上,正如另一个答案中所指出的那样,因为VBScript InputBox function docs注意到如果用户单击“取消”,该函数将返回零长度字符串(&#34;&#34; ) 你肯定需要检查一个空/零长度的字符串。