2016-06-02 4 views
2

У меня есть два пакетных файла. Первый - загрузка файлов из SFTP. Второй - манипулировать некоторыми локальными файлами. Поскольку мне нужно подождать, пока первый закончен, как сохранить программу в VBA, чтобы пакетные файлы могли выполняться один за другим?Как выполнить несколько пакетных файлов по одному в VBA?

Сейчас я использую

Call Shell("Bat1.bat") 
Call Shell("Bat2.bat") 

Однако два пакетных файлов будут выполняться одновременно. Bat2.bat не ждет Bat1.bat.

Благодаря

+0

Какой код вы застряли прямо сейчас? – Brad

+0

@Brad Я добавил несколько объяснений. – NewGuyComesIn

+1

http://www.cpearson.com/excel/ShellAndWait.aspx –

ответ

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, чтобы определить, завершилась ли задача, как в ссылке ShellAndWait, предоставленной Тимом Уильямсом in a comment

+0

Спасибо за ответ. Одна вещь «Bat1.bat» не может быть изменена мной. У меня нет разрешения на его изменение. Есть ли способ сделать это без изменения «Bat1.bat»? – NewGuyComesIn

+0

@NewGuyComesIn отредактирован. Надеюсь, поможет. –

+0

Спасибо. По-прежнему отмечайте свое мнение. – NewGuyComesIn

Смежные вопросы