2

我有两个正在运行的蝙蝠,我必须等待“job.bat”结束后再运行“another.bat”,因为“another.bat”正在使用来自“job.bat”的文件。请问如何在vbs中同步它们?谢谢

shell.run "job.bat ""my file""" & " " & myVar
'shell.exit
shell.run "another.bat ""lib.txt""" & " " & outVar

我在这两个 shell.run 之间使用了这个,等待文件输出可从第一个 bat 获得,但它不会改变任何东西

  While Not oFSO.FileExists("out") 
   wait 10
   Wend

我很惊讶,因为我一直认为 vbs 程序是顺序访问(顺序指令),而我看到 "another.bat" 在 "job.bat" 终止之前启动了!!!!!!

4

2 回答 2

4

您可以使用可选的布尔参数bWaitOnReturn,以便 Shell.Run在继续执行 wsh 脚本之前等待命令完成。

所以,一般语法

Shell.Run (strCommand, [intWindowStyle], [bWaitOnReturn]) 

在你的情况下可能看起来像这样:

shell.run "job.bat ""my file""" & " " & myVar, , True
'shell.exit
shell.run "another.bat ""lib.txt""" & " " & outVar
于 2013-04-02T11:20:46.107 回答
1

VBS 的执行顺序的。只是默认情况下,该Shell.Run函数不会等待调用的命令/程序完成后再继续。它很可能只是相应系统函数的包装,可能是ShellExecuteor ShellExecuteEx(您可能不需要知道),并且它是底层系统函数的默认行为影响 VBS 的Shell.Run.

在这种情况下,最好的解决方案可能是明确指定Run函数应该等待第一个批处理文件的终止,根据@PA 的回答。但请注意,如果您通过一次调用调用两个批处理文件,您可以达到相同的效果,并用与号 ( ) 分隔两个命令。基本上是这样的: Shell.Run&

Shell.Run "command1 & command2"

或者,适用于您的特定情况,如下所示:

Shell.Run "job.bat ""my file""" & " " & myVar & " & another.bat ""lib.txt""" & " " & outVar
于 2013-04-02T14:03:22.543 回答