Невозможно использовать круглые скобки при вызове Sub Error 800A0414 VBS
Я получаю ошибку 800A0414 в строках 7 и 12 этого script:
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
Я пытаюсь запустить пакетный пакет script, который запускает процесс, а затем дождитесь завершения процесса, затем запустим еще одну партию script. Я также не хочу показывать какие-либо командные поля. Если их проще, пожалуйста, дайте мне знать.
Спасибо за помощь
Ответы
Ответ 1
Когда вы вставляете список аргументов процедуры в круглые скобки, вы должны использовать ключевое слово Call
:
Call CreateObject("WScript.Shell").Run("program.bat", 0, True)
Если вы опускаете ключевое слово Call
, вы также должны отбрасывать круглые скобки:
CreateObject("WScript.Shell").Run "program.bat", 0, True
Ответ 2
Чтобы завершить сказанное ранее:
При использовании Call ключевого слова для вызова процедуры (то есть суб или функции) аргументы должны быть заключены в круглые скобки, за исключением случаев, когда процедура не имеет аргументов, и в этом случае скобки являются необязательными. Например, все утверждения:
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)
действительны, кроме третьего, который имеет более одного аргумента. Если это не ясно, внутренний вызов "теста" в последнем утверждении действителен, потому что его возвращаемое значение используется в качестве аргумента для другого вызова.
Обратите внимание, что всякий раз, когда в этом тексте используются круглые скобки, он подразумевает также возможные значения, разделенные запятыми.
Ответ 3
Мне кажется, что это VB.NET, а не код VBScript.
У вас Функция оболочки в VB.NET(и другие методы).
В любом случае Run возвращает код ошибки, возвращаемый программой, и если вы
хранилище, которое приводит к переменной, вы можете использовать круглые скобки в этом случае.
Dim lResult As Long
lResult = CreateObject("Wscript.Shell").Run("program.bat", 0, True)
На остальное ответил @Helen.