VBScript ObjExec 从未获得新的状态代码

VBScript ObjExec 从未获得新的状态代码

我开始使用一个简单的 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"

问题是,它会永远挂起。它永远不会跳出 while 循环。如果我使用 oShell.Run,​​它似乎可以正常工作,但我需要保证我正在执行的每个脚本(最终会有五个,但我从让它与 1 一起工作开始)在报告之前都已完成。但我不想让它们一个接一个地运行。并行运行它们完全没问题,而且速度会快得多。

奇怪的是,如果我使用 while 循环打印出脚本输出,它似乎工作得很好:

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

所以我不确定 Exec 命令有什么问题或者我做错了什么。

如果有人有建议我很乐意听取。

答案1

对于那些找到这个答案并且和我一样震惊的人来说,我需要做两件事:

首先,我的脚本的 oExecs 的一些 StdIn 正在等待输入。使用oExec.StdIn.close()来防止这种情况。最后,当文本无处可做时,我的一些脚本表现怪异。使用 来指导脚本的输出> nil。这些让我保持理智。

相关内容