26

我在此脚本的第 7 行和第 12 行收到 800A0414 错误:

Module Module1

  Dim p

    Sub Main()
        CreateObject("Wscript.Shell").Run("program.bat", 0, True)

        p = Process.GetProcessesByName("program")
        If p.Count > 0 Then
            WScript.Sleep(300000)
        Else
            CreateObject("Wscript.Shell").Run("program clean up.bat", 0, True)
        End If

    End Sub

    Private Function WScript() As Object
        Throw New NotImplementedException
    End Function

End Module

我正在尝试运行一个批处理脚本,它启动一个进程,然后等到进程终止,然后运行另一个批处理脚本。我也不希望显示任何命令框。如果他们是更简单的方法,请告诉我。

谢谢你的帮助

4

3 回答 3

55

当您将过程的参数列表括在括号中时,您必须使用Call关键字:

Call CreateObject("WScript.Shell").Run("program.bat", 0, True)

如果省略Call关键字,还必须去掉括号:

CreateObject("WScript.Shell").Run "program.bat", 0, True
于 2013-02-16T08:08:02.483 回答
12

完成之前所说的:

Call关键字用于调用过程(即 sub 或函数)时,参数必须用括号括起来,除非过程没有参数,在这种情况下括号是可选的。例如所有语句:

Call test()
Call test
Call test(1,2)

是有效的,但不是这个:

Call test 1

在不使用 Call 关键字调用过程时,括号只能在过程有零个或一个参数或过程有返回值(即是一个函数)且其值用于同一语句时使用。例如所有语句:

test()
test(1)
test(1,2)
a = test
a = test(1,2)
a = test(test(1,2),2)

是有效的,除了第三个有多个参数。如果不清楚,最后一条语句中“test”的内部调用是有效的,因为它的返回值被用作另一个调用的参数。

请注意,无论何时在本文中使用括号,它也意味着暗示可能的逗号分隔值。

于 2013-12-27T22:27:04.803 回答
1

在我看来,这是一个 VB.NET,而不是 VBScript 代码。您在 VB.NET(和其他方法)中有Shell 函数。

无论如何,Run返回程序返回的任何错误代码,如果将该结果存储在变量中,则在这种情况下可以使用括号。

Dim lResult As Long
lResult = CreateObject("Wscript.Shell").Run("program.bat", 0, True)

其余的由@Helen 回答。

于 2013-02-16T14:11:42.513 回答