命令从vbs同步两个.bat

时间:2013-04-02 09:33:12

标签: vbscript synchronize

我有两个正在运行的蝙蝠,我必须等待“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”终止之前启动!!!!!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

VBS 的执行是顺序执行。只是默认情况下,Shell.Run函数不会等待调用的命令/程序在继续之前完成。它很可能只是一个相应系统函数的包装器,可能是ShellExecuteShellExecuteEx(你可能不需要知道),它是底层系统函数的默认行为,会影响VBS的{{ 1}}。

在这种情况下,最好的解决方案可能是明确指定Shell.Run函数应该等待第一个批处理文件的终止,如@PA's answer所示。但请注意,如果使用 Run调用调用两个批处理文件,则可以实现相同的效果,并使用&符号分隔两个命令( Shell.Run)。基本上就是这样:

&

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

Shell.Run "command1 & command2"