Как команда START с опцией WAIT
START /wait notepad.exe
START /wait notepad.exe
... отличается от использования команды CALL?
CALL notepad.exe
CALL notepad.exe
Есть ли ситуация, когда один может вести себя иначе, чем другой, в зависимости от того, что выполняется?
Ответы:
Для exe- файлов, я полагаю, различия почти не важны.
Но для запуска exe вам даже не нужно
CALL
.При запуске другого пакета это большая разница, так
как
CALL
запускает его в том же окне, и вызываемый пакет имеет доступ к тому же переменному контексту.Таким образом, он также может изменять переменные, которые влияют на вызывающего.
START
создаст новый cmd.exe для вызываемого пакета и без / b откроет новое окно.Поскольку это новый контекст, переменные не могут быть общими.
Различия
Использование
start /wait <prog>
- Изменения переменных среды теряются по
<prog>
окончании- Вызывающий ожидает
<prog>
завершенияИспользование
call <prog>
- Для exe его можно опустить, потому что это равносильно только запуску
<prog>
- Для exe-prog пакет вызывающей программы ожидает или запускает exe асинхронно, но поведение зависит от самого exe-файла .
- Для пакетных файлов пакет вызывающего абонента продолжается, когда вызываемый
<batch-file>
завершается, БЕЗ вызова элемент управления не вернется в пакет вызывающего абонента.Приложение:
Использование
CALL
может изменять параметры (для пакетных и исполняемых файлов), но только в том случае, если они содержат символы каретки или процента.Будет расширен до (из пакетного файла)
источник
start /wait /b cmd /c <batchfile.bat>
потому что командные файлы запускаются один за другим в одном и том же командном окнеcall batchfile.bat
Я думаю, что они должны работать в целом одинаково, но есть некоторые различия.
START
обычно используется для запуска приложений или для запуска приложения по умолчанию для файлов данного типа. Таким образом, если выSTART http://mywebsite.com
этого не делаетеSTART iexplore.exe http://mywebsite.com
.START myworddoc.docx
запустит Microsoft Word и откроет myworddoc.docx.CALL myworddoc.docx
делает то же самое ... однакоSTART
предоставляет больше возможностей для состояния окна и тому подобного. Это также позволяет установить приоритет процесса и сходство.Короче говоря, учитывая дополнительные параметры, предоставляемые start, он должен быть вашим выбором.
источник
Есть полезная разница между
call
иstart /wait
при вызове,regsvr32.exe /s
например, на которую также ссылается Гэри в своем ответе на командную строку how-do-i-get-the-application-exit-code-from-a-windows-windowsвсегда будет возвращать 0, но
вернет уровень ошибки от regsvr32.exe
источник
Это то, что я обнаружил при параллельном запуске командных файлов (несколько экземпляров одного и того же bat-файла одновременно с разными входными параметрами):
Допустим, у вас есть исполняемый файл, который выполняет длинную задачу под названием LongRunningTask.exe
Если вы вызываете exe-файл непосредственно из файла bat, будет выполнен только первый вызов LongRunningTask, в то время как остальные вызовут ошибку ОС «Файл уже используется процессом»
Если вы используете эту команду:
start / B / WAIT "" "LongRunningTask.exe" "параметры"
Вы сможете запустить несколько экземпляров bat и exe, все еще ожидая завершения задачи, прежде чем bat продолжит выполнение оставшихся команд. Параметр / B позволяет избежать создания другого окна, для работы команды необходимы пустые кавычки, см. Ссылку ниже.
Обратите внимание, что если вы не используете / WAIT в начале, LongRunningTask будет выполняться в то же время, что и остальные команды в пакетном файле, поэтому это может создать проблемы, если одна из этих команд требует вывода LongRunningTask.
Возобновление:
Это не может работать параллельно:
Это будет работать параллельно и будет в порядке, если между выходными данными команды и остальной частью файла bat нет зависимости между данными:
Это будет выполняться параллельно и будет ждать завершения задачи, поэтому вы можете использовать вывод:
Ссылка на команду запуска: Как запустить программу из командного файла, не оставляя консоль открытой после запуска программы?
источник
Вызов
Вызывает одну пакетную программу из другой, не останавливая родительскую пакетную программу. Команда call принимает метки в качестве цели вызова. Вызов не влияет на командную строку при использовании вне сценария или командного файла. https://technet.microsoft.com/en-us/library/bb490873.aspx
Начало
Запускает отдельное окно командной строки для запуска указанной программы или команды. При использовании без параметров start открывает второе окно командной строки. https://technet.microsoft.com/en-us/library/bb491005.aspx
источник
Это старая ветка, но я только что столкнулся с этой ситуацией и обнаружил изящный способ ее обойти. Я пытался запустить файл setup.exe, но основное внимание уделялось следующей строке сценария, не дожидаясь завершения процесса setup.exe. Я попробовал вышеуказанные решения без удачи.
В конце концов, передача команды через большее сделала свое дело.
setup.exe {аргументы} | Больше
источник