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

Dim oShell, oExec
Set oShell = CreateObject(WScript.Shell)

Set oExec = oShell.Exec("cmd.exe /C cd path/to/file & runScript")

While oExec.Status = 0
     WScript.Sleep(250)
Loop

WScript.Echo "Done"

Дело в том, что оно висит навсегда. Это никогда не выходит из цикла. Кажется, работает нормально, если я использую oShell.Выполнить, но мне нужно гарантировать, что каждый выполняемый мной сценарий (в конце концов, будет пять, но я начинаю с того, чтобы заставить его работать с 1) завершен, прежде чем сообщать. Но я не хочу, чтобы они бегали один за другим. Выполнение их параллельно прекрасно и будет намного быстрее.

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

...
Do
     str = oExec.StdOut.ReadLine()
     WScript.Echo str
Loop While Not oExec.StdOut.atEndOfStream
...

Поэтому я не уверен, в чем проблема с командой Exec или что я делаю неправильно.

Если у кого-нибудь есть предложение, я бы хотел его услышать.

1 ответ1

0

Для любого, кто находит этот ответ и столь же ошеломлен, как и я, мне нужно было сделать две вещи:

Во-первых, некоторые из StdIn oExecs для моих скриптов ожидали ввода. Используйте oExec.StdIn.close() чтобы предотвратить это. Наконец, некоторые из моих сценариев вели себя странно, когда текст не имел к этому никакого отношения. Направьте вывод сценариев с помощью > nil . Это спасло мое здравомыслие.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .