Пакетная программа не работает так, как должна!

Пакетная программа не работает так, как должна!

Я создал пакетный скрипт (просмотреть полностью здесь) для запуска сначала некоторых служб, а затем приложения. После завершения приложения пакет должен, GOTO somewhereно он ждет выхода программы, чтобы продолжить работу.

Заголовок для запуска приложения и продолжения:

:vmSTARTAPP
    "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"
    IF NOT %BACK%==NULL GOTO %BACK%
    GOTO STARTAPPCONT

Этот заголовок вызывается из другого заголовка:

:STARTAPP
    cls
    echo Starting Application
    GOTO %BATCH%

%BATCH%содержит имя следующего заголовка — в приведенном выше случае vmSTARTAPP.

Если запустить его из нового окна командной строки, он работает нормально, но не в этом пакете.

Что я делаю не так?

P.S. Не отсылайте этот вопрос к моему предыдущему вопросу. Это совсем другой случай.

решение1

Не могли бы вы попробовать заменить строки, которые показывают

:vmSTARTAPP
    "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"

с

:vmSTARTAPP
    start "Starting VMWare" /B "C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe"

Я предполагаю, что вы хотите запустить VMWare в фоновом режиме и продолжить работу без остановки, и, теоретически, это должно сработать.

Команда startуказывает DOS выполнить переданную вами команду (в данном случае «C:\Program Files (x86)\VMware\VMware Workstation\vmware.exe») и по умолчанию не ждет возврата переданной вами команды, а вместо этого запускает ее в отдельном процессе.

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

Заголовок "Starting VMWare"— это просто заголовок, только что созданное окно DOS имело бы этот заголовок, если бы не аргумент, /Bкоторый говорит ему не показывать новое окно DOS. Заголовок как бы необходим, но как бы необязателен, и у меня были редкие моменты WTF в скриптах без него, но такие случаи — скорее исключение, чем правило.

Более подробную информацию о команде «Пуск» можно найти здесь:http://ss64.com/nt/start.html

Связанный контент