我有两个批处理文件。第一个是从SFTP下载文件。第二是操纵一些本地文件。由于我必须等到第一个完成,如何在VBA中保存程序以便批处理文件可以逐个执行?
现在我正在使用
Call Shell("Bat1.bat")
Call Shell("Bat2.bat")
但是,两个批处理文件将同时执行。 Bat2.bat
将不会等待Bat1.bat
。
由于
答案 0 :(得分:1)
首先,删除Call
语句,不需要它。
Shell "Bat1.bat"
让Bat1.bat
在完成后创建一个空的“标记”文件,例如bat1.ready
。然后使您的VBA代码循环,直到它找到.ready
文件:
While Dir("bat1.ready") = vbNullString
DoEvents
Wend
这应该保持您的UI /主机应用程序响应,而在标记文件启动之前基本上什么都不做。
接下来,删除标记文件并继续bat2
:
Kill "bat1.ready"
Shell "Bat2.bat"
钽哒!
Shell
函数returns immediately,并返回创建的TaskID。如果您无法以任何方式修改批处理文件(或询问谁可以修改它,如果他们可以这样做),那么您可能需要使用一些Win32调用来使用该TaskID来确定任务是否已完成,如在Tim Williams提供的ShellAndWait链接中in a comment