提问人:Strong 提问时间:2/16/2013 更新时间:5/26/2016 访问量:89875
调用子错误 800A0414 VBS 时无法使用括号
Cannot use parentheses when calling a Sub Error 800A0414 VBS
问:
我在此脚本的第 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
我正在尝试运行一个批处理脚本,该脚本启动一个进程,然后等到该进程终止,然后运行另一个批处理脚本。我也不希望显示任何命令框。如果有更简单的方法,请告诉我。
感谢您的帮助
答:
56赞
Helen
2/16/2013
#1
将过程的参数列表括在括号中时,必须使用 Call
关键字:
Call CreateObject("WScript.Shell").Run("program.bat", 0, True)
如果省略关键字,还必须删除括号:Call
CreateObject("WScript.Shell").Run "program.bat", 0, True
评论
3赞
BeowulfNode42
12/8/2015
似乎有一个例外,如果您只使用第一个参数,它将允许您使用括号。即。 无怨无悔地工作CreateObject("Wscript.Shell").Run("program.bat")
1赞
Helen
12/8/2015
@BeowulfNode42:是有效的语法 - 它被解释为 .将括号括在特定参数两边会强制传递此参数,而不是 。换句话说,如果 sub 需要参数,则会起作用,但如果它需要参数,则不起作用。有关详细信息,请参阅 VBScript 中的 ByRef 和 ByVal。.Run("program.bat")
Call ...Run( ("program.bat") )
ByVal
ByRef
MySub(param)
ByVal
ByRef
2赞
Panayot Karabakalov
2/16/2013
#2
在我看来,这是一个 VB.NET,而不是 VBScript 代码。 您在 VB.NET(和其他方法)中具有 Shell 函数。
无论如何,Run 会返回程序返回的任何错误代码,并且如果您 将该结果存储在变量中,在这种情况下可以使用括号。
Dim lResult As Long
lResult = CreateObject("Wscript.Shell").Run("program.bat", 0, True)
其余的由@Helen回答。
12赞
Mohammad Amin Bandekhoda
12/28/2013
#3
要完成之前所说的内容,请执行以下操作:
当 Call 关键字用于调用过程(即 sub 或 function)时,参数必须括在括号中,除非过程没有参数,在这种情况下,括号是可选的。例如,所有语句:
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”的内部调用是有效的,因为它的返回值被用作另一个调用的参数。
请注意,每当本文中使用括号时,它也意味着可能用逗号分隔的值。
评论
1赞
Helen
10/14/2014
注意:与 不同。它等效于 ,其中参数(而不是参数列表)周围的括号强制传递参数而不是 。有关详细信息,请参阅 VBScript 中的 ByRef 和 ByVal。test(1)
test 1
Call test( (1) )
ByVal
ByRef
上一个:检查是否选择了部件或产品
评论