Невозможно использовать круглые скобки при вызове Sub Error 800A0414 VBS

Я получаю ошибку 800A0414 в строках 7 и 12 этого скрипта:

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 

Я пытаюсь запустить пакетный скрипт, который запускает процесс, а затем ждет завершения процесса, а затем запускает другой пакетный скрипт. Я также не хочу показывать какие-либо командные поля. Если их проще, пожалуйста, дайте мне знать.

Спасибо за вашу помощь

Когда вы вставляете список аргументов процедуры в круглые скобки, вы должны использовать ключевое слово Call :

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

Если вы опускаете ключевое слово Call , вы также должны отбрасывать круглые скобки:

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

Чтобы завершить то, что было сказано ранее:

Когда ключевое слово 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) 

являются действительными, за исключением третьего, который имеет более одного аргумента. В случае, если неясно, внутренний вызов «теста» в последнем утверждении действителен, потому что его возвращаемое значение используется в качестве аргумента для другого вызова.

Обратите внимание, что всякий раз, когда в этом тексте используются круглые скобки , он подразумевает также возможные значения, разделенные запятыми .

Кажется, это VB.NET, а не код VBScript. У вас есть функция Shell в VB.NET (и другие методы).

В любом случае, Run возвращает код ошибки, возвращаемый программой, и если вы сохраните этот результат в переменной, вы можете использовать круглые скобки в этом случае.

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

Остальное ответили @Helen.

  • вставить переменную в команду cmd
  • VBScript & Access MDB - 800A0E7A - «Поставщик не найден. Возможно, он неправильно установлен "
  • Скриптинг Bitlocker Расшифровка локального жесткого диска
  • Код VBscript для захвата stdout, без отображения windows консоли
  • Добавление кавычек в строку в VBScript
  • Плохой выбор данных с использованием VBScript, значений полей даты
  • Как остановить открытие каждого файла пакета как процесс с именем cmd.exe, как показано в диспетчере задач
  • 800A0401 - Ожидаемый конец заявления
  • Скрыть окно командной строки при использовании Exec ()
  • Любые хорошие библиотеки для parsingа JSON в classическом ASP?
  • Passing-variable-from-vbscript-to-batch-файл с аргументами
  • Давайте будем гением компьютера.