Vbscript类型不匹配错误显然不合理

时间:2015-10-26 16:29:15

标签: vbscript

我试图弄清楚为什么我会为下面的代码收到此错误。我在网上搜索了可能的原因,但我无法找到。请看一下:

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的返回类型为stringCreateRestorePoint的第一个参数也为string。事实上,如果我直接将InputBox称为参数,它就可以工作。

2 个答案:

答案 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; ) 你肯定需要检查一个空/零长度的字符串。