有人可以解释我的VBScript错误

时间:2015-10-18 03:28:49

标签: vbscript

此脚本为我提供1到3之间的数字并输入相应的字母(1 = a,2 = b,3 = c)。我以前做过这个,它在字母意义上正常工作。 InputBox得到一个高于0的数字,并且它应该允许脚本输入多少个字母,但是我的do while max > count不能以最大值停止它。只是继续,直到我通过任务管理器手动禁用它。有没有人看到这个有什么问题?

Set ws = CreateObject("Wscript.Shell")

max = InputBox("Max number of characters (Numbers Only!)",  "Enter Integer")

If max = "" Then
    Wscript.Quit
ElseIf max < 0 Then
    Wscript.Quit
End If

count = 0
ws.Run "notepad.exe"
Wscript.sleep 1000

Do While max > count

    count = count + 1
    Randomize
    rand = Int((3 - 1 + 1) * rnd + 1)

    If rand = 1 Then
        char = "a"
    ElseIf rand = 2 Then
        char = "b"
    ElseIf rand = 3 Then
        char = "c"
    End If

    Wscript.sleep 50
    ws.Sendkeys char

Loop

Wscript.Quit

2 个答案:

答案 0 :(得分:2)

问题是您的max变量包含字符串"3"而不是原始数值3。对于字符串值与数字相比,VBScript的相对比较运算符(>>>=<=)不会像在其他情况下那样工作语言(并且它们不是基于字符串第一个字符的ASCII值)。

修复方法是使用CInt确保max为数字:

Dim max
max = InputBox( ... )
If max = ""  Then ... End If
max = CInt( max )

Do While max > count
    ...
Loop

顺便说一句,我会将count重命名为i,以更好地传达其语义含义。

答案 1 :(得分:1)

Comparison Operators (VBScript) reference:读取表达式的比较方式或比较结果,具体取决于基础子类型:

  

如果一个表达式是数字而另一个是字符串,那么   数值表达式小于字符串表达式。

我使用下一个代码段:

max = InputBox("Max number of characters (Numbers Only!)",  "Enter Integer")

If Not Isnumeric( max) Then  Wscript.Quit ''' affects `max = ""` as well
max = CInt( max)                          ''' convert `max` to a Variant of subtype Integer
If max < 0 Then Wscript.Quit

同时阅读Randomize StatementRnd FunctionLooping Through Code。也许

Randomize
For count = 1 to max
    ''' more code here based on `count` value and `rnd()` function
Next

可能比

更好(随机种子)和更简单(循环)
count=0
Do While max > count
    count = count + 1
    Randomize
    ''' more code here based on `count` value and `rnd()` function
Loop

最后,请阅读bypassing the errant keystrokes complaint

  

我听说过有关使用SendKeys的最大抱怨之一   宏的方法是,如果窗口焦点以某种方式改变了   在脚本执行的中间,键盘将被发送到   任何窗口都能获得焦点。现在这种危险就是这个   用于一个窗口的击键可能会产生灾难性的影响(比如   应用于另一个窗口时导致数据丢失。