Подтвердить что ты не робот

Команда CALL и START с опцией/WAIT

Как работает команда START с опцией WAIT

START /wait notepad.exe 
START /wait  notepad.exe 

... любое отличие от использования команды CALL?

CALL notepad.exe 
CALL notepad.exe 

Есть ли ситуация, когда можно вести себя по-другому, а другая зависит от того, что выполняется?

4b9b3361

Ответ 1

Для exe файлов, я полагаю, различия почти не важны.
Но для запуска exe вам даже не нужен CALL.

При запуске другой партии это большая разница,
поскольку CALL запустит его в том же окне, и вызываемый пакет получит доступ к тому же переменному контексту.
Таким образом, он также может изменять переменные, которые влияют на вызывающего.

START создаст новый cmd.exe для вызываемого пакета и без /b откроет новое окно.
Поскольку это новый контекст, переменные не могут быть общими.

Различия

Использование start/wait <prog>
- Изменения переменных среды теряются, когда заканчивается <prog>
- Звонящий ждет, пока не закончится <prog>

Использование call <prog>
- Для exe его можно опустить, потому что он равен только запуску <prog>
- Для exe-программы пакет вызывающего ожидает или запускает exe файл асинхронным, но поведение зависит от самого exe файла.
- Для пакетных файлов пакет вызывающего абонента продолжается, когда вызываемый <batch-file> завершается, БЕЗ вызова элемент управления не вернется в пакет вызывающего абонента.

Приложение:

Использование CALL может изменить параметры (для пакетных и exe файлов), но только в том случае, если они содержат каретки или знаки процента.

call myProg param1 param^^2 "param^3" %%path%%

Будет расширен до (из пакетного файла)

myProg param1 param2 param^^3 <content of path>

Ответ 2

Я думаю, что они должны выполнять в целом то же самое, но есть некоторые различия. START обычно используется для запуска приложений или для запуска приложения по умолчанию для заданного типа файла. Таким образом, если вы START http://mywebsite.com не выполняете START iexplore.exe http://mywebsite.com.

START myworddoc.docx запускает Microsoft Word и открывает myworddoc.docx. CALL myworddoc.docx делает то же самое... однако START предоставляет больше параметров для состояния окна и вещей такого характера. Он также позволяет установить приоритет процесса и аффинность.

Короче говоря, учитывая дополнительные параметры, предоставляемые при запуске, это должен быть ваш выбор.

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
  [command/program] [parameters]

"title"     Title to display in window title bar.
path        Starting directory.
B           Start application without creating a new window. The
            application has ^C handling ignored. Unless the application
            enables ^C processing, ^Break is the only way to interrupt
            the application.
I           The new environment will be the original environment passed
            to the cmd.exe and not the current environment.
MIN         Start window minimized.
MAX         Start window maximized.
SEPARATE    Start 16-bit Windows program in separate memory space.
SHARED      Start 16-bit Windows program in shared memory space.
LOW         Start application in the IDLE priority class.
NORMAL      Start application in the NORMAL priority class.
HIGH        Start application in the HIGH priority class.
REALTIME    Start application in the REALTIME priority class.
ABOVENORMAL Start application in the ABOVENORMAL priority class.
BELOWNORMAL Start application in the BELOWNORMAL priority class.
NODE        Specifies the preferred Non-Uniform Memory Architecture (NUMA)
            node as a decimal integer.
AFFINITY    Specifies the processor affinity mask as a hexadecimal number.
            The process is restricted to running on these processors.

            The affinity mask is interpreted differently when /AFFINITY and
            /NODE are combined.  Specify the affinity mask as if the NUMA
            node processor mask is right shifted to begin at bit zero.
            The process is restricted to running on those processors in
            common between the specified affinity mask and the NUMA node.
            If no processors are in common, the process is restricted to
            running on the specified NUMA node.
WAIT        Start application and wait for it to terminate.

Ответ 3

Существует полезное различие между call и start /wait при вызове regsvr32.exe /s, также упоминаемом Gary в в ответ на how-do-i-get-the-application-exit-code-from-a-windows-command-line

call regsvr32.exe /s broken.dll
echo %errorlevel%

всегда будет возвращать 0, но

start /wait regsvr32.exe /s broken.dll
echo %errorlevel%

вернет уровень ошибки из regsvr32.exe

Ответ 4

Вызов

Вызывает одну пакетную программу из другой, не останавливая родительскую пакетную программу. Команда call принимает метки в качестве цели вызова. Вызов не влияет на командную строку при использовании вне сценария или командного файла. https://technet.microsoft.com/en-us/library/bb490873.aspx

Начните

Запускает отдельное окно командной строки для запуска указанной программы или команды. При использовании без параметров start открывает второе окно командной строки. https://technet.microsoft.com/en-us/library/bb491005.aspx

Ответ 5

Это то, что я обнаружил при параллельном запуске пакетных файлов (несколько экземпляров одного и того же файла bat одновременно с разными входными параметрами):

Предположим, что у вас есть exe файл, который выполняет длинную задачу, называемую LongRunningTask.exe

Если вы вызываете exe непосредственно из файла bat, только первый вызов LongRunningTask будет завершен, а остальная часть получит ошибку ОС "Файл уже используется процессом"

Если вы используете эту команду:

start/B/WAIT "" LongRunningTask.exe "" параметры"

Вы сможете запускать несколько экземпляров bat и exe, все еще ожидая завершения задачи до того, как bat продолжит выполнение оставшихся команд. Параметр /B состоит в том, чтобы избежать создания другого окна, для выполнения команды нужно использовать пустые кавычки, см. Ссылку ниже.

Обратите внимание: если вы не используете /WAIT в начале, LongRunningTask будет выполняться одновременно с оставшимися командами в пакетном файле, поэтому может возникнуть проблема, если одна из этих команд требует вывода LongRunningTask

Возобновление:

Это не может работать параллельно:

  • вызов LongRunningTask.exe

Это будет работать параллельно и будет нормально, поскольку нет зависимостей между выводами команды и остальной частью файла bat:

  • start/B "" LongRunningTask.exe "" параметры"

Это будет работать параллельно и дождитесь завершения задачи, поэтому вы можете использовать вывод:

  • start/B/WAIT "" LongRunningTask.exe "" параметры"

Ссылка для команды запуска: Как запустить программу из пакетного файла, не покидая консоль после запуска программы?

Ответ 6

Это старая ветка, но я только что столкнулся с этой ситуацией и обнаружил хороший способ ее обойти. Я пытался запустить файл setup.exe, но фокус возвращался к следующей строке скрипта, не дожидаясь завершения файла setup.exe. Я попробовал вышеуказанные решения без удачи.

В конце концов, передача команды через большее сделала свое дело.

setup.exe {аргументы} | Больше