我有两个正在运行的蝙蝠,我必须等待“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”终止之前启动!!!!!
答案 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
函数不会等待调用的命令/程序在继续之前完成。它很可能只是一个相应系统函数的包装器,可能是ShellExecute
或ShellExecuteEx
(你可能不需要知道),它是底层系统函数的默认行为,会影响VBS的{{ 1}}。
在这种情况下,最好的解决方案可能是明确指定Shell.Run
函数应该等待第一个批处理文件的终止,如@PA's answer所示。但请注意,如果使用单 Run
调用调用两个批处理文件,则可以实现相同的效果,并使用&符号分隔两个命令( Shell.Run
)。基本上就是这样:
&
或者,适用于您的特定情况,如下:
Shell.Run "command1 & command2"