Пакетный файл, чтобы дождаться загрузки / инициализации другой программы, затем выполнить команду? - PullRequest
0 голосов
/ 07 июня 2010

Мне нужна помощь в написании довольно простого .BAT файла.

Я загружаю свою основную программу, но для загрузки и инициализации этой программе требуется ~ 20 сек.

У меня есть другой API командной строки, который я могу запустить, чтобы взаимодействовать с вышеуказанной программой, но, очевидно, до загрузки и инициализации вышеуказанной программы нет смысла пытаться.

Если программа не запущена, API командной строки возвращает строку с указанием именно этого - в противном случае он просто работает и завершается. Легко.

Итак, я хочу подождать, пока вышеприведенное будет загружено / инициализировано, прежде чем запускать мои команды API на нем.

Я мог бы поставить там сон / ожидание, но я хочу что-то более твердое. Ожидание ~ 20 секунд не обязательно является последовательным.

Любой способ выполнить API командной строки снова и снова, пока ответ не будет удовлетворительным, а затем выйти?

J

1 Ответ

0 голосов
/ 07 июня 2010

Конечно. Однако вам, вероятно, следует рассмотреть соответствующий код завершения вместо строки сообщения, чтобы показать, что загрузка еще не завершена. Если выход никогда не локализуется там.

В любом случае, мы идем:

:loop
yourcommand.exe | findstr MAGIC STRING SIGNIFYING LOADING NOT YET COMPLETE >nul 2>&1
if not errorlevel 1 goto loop

Это просто повторяется до тех пор, пока findstr там возвращает 0 в качестве кода выхода (что означает, что он нашел строку).

Однако есть две проблемы:

  1. Это боров ресурсов. Вы должны спать там, чтобы попробовать каждую секунду или около того, вместо того, чтобы делать это непрерывно:

    ping -n 1 ::1 >nul 2>&1
    
  2. Хотя это и будет запускать вашу намеченную команду не более одного раза (в конце), она съест все выходные данные, поскольку направляет ее на findstr. Если у вас нет tee под рукой, это трудно решить (это может включать for цикл вывода и проверку каждой строки с помощью findstr - вы не хотите идти туда, поверьте мне.

    Опция может быть, если у вашей команды есть способ просто проверить, а затем выдать фактические команды с помощью вызова после цикла (который существует, когда программа работает). Тогда вы можете с радостью записать все результаты. Однако, если программа, с которой вы разговариваете, выходит из строя между выходом из цикла и запуском программы с фактическими командами, у вас возникает другая проблема.

...