我开始使用一个简单的 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
。这些让我保持理智。