Команда CALL vs. START з опцією / WAIT


149

Як команда START з опцією ЗАЧЕКАЙТЕ

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

... чим відрізняється від використання команди CALL?

CALL notepad.exe 
CALL notepad.exe 

Чи існує ситуація, коли один може поводитись інакше, ніж інший залежно від того, що виконується?


Відповіді:


183

Для файлів EXE , я вважаю, що відмінності майже не важливі.
Але для створення exe вам навіть не потрібно CALL.

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

STARTстворить новий cmd.exe для виклику партії та без / b відкриє нове вікно.
Оскільки це новий контекст, змінними не можна ділитися.

Відмінності

Використання start /wait <prog>
- Зміни змінних оточуючих середовищ втрачаються після <prog>закінчення
- Абонент чекає, поки <prog>завершиться завершення

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

Додаток:

Використання CALLможе змінювати параметри (для пакетних та EXE-файлів), але лише тоді, коли вони містять символи символів або відсотків.

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

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

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

25
Під час виконання file.bat за допомогою START / WAIT вам потрібно вказати START / WAIT cmd / c "file.bat", а не просто START / WAIT "file.bat", інакше вікно cmd, створене для file.bat, залишиться відкритим
FrinkTheBrave

5
Ви можете знайти порівняння між CALL та START на веб-сайті: ss64.com/nt/start.html (оновлено сьогодні розділами "Старт / зачекайте" та "START / CALL")
Альфредо Капобянчі

Мій улюблений start /wait /b cmd /c <batchfile.bat>тому, що пакетні файли працюють один за одним у тому ж командному вікні
linux64kb

@ linux64kb, але для пакетних файлів це не потрібно, потрібно лишеcall batchfile.bat
jeb

@jeb Правда. Я вважаю за краще цей, тому що кожен пакетний файл буде працювати в іншому оточенні командної оболонки, успадковуючи змінні з оболонки виклику та зміни початкових значень втрачаються після завершення пакету -> жодного сміття не залишається там після кожного наступного запуску. Ще одна виграш полягає в тому, що вам не доведеться мати справу зі скиданням змінних у ваших сценаріях.
linux64kb

17

Я думаю, що вони повинні виконувати однаково, але є деякі відмінності. 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's 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.

11

Існує корисна різниця між callі start /waitпри виклику, regsvr32.exe /sнаприклад, на які посилається також Гері у своїй відповіді на командний рядок "як зробити" я "дістати" заявку "".

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

завжди поверне 0, але

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

поверне рівень помилки з regsvr32.exe


8

Це я знайшов під час паралельного запуску пакетних файлів (декілька екземплярів одного і того ж файлу 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" "Параметри"

Посилання на команду start: Як я можу запустити програму з пакетного файлу, не залишаючи консоль відкритою після запуску програми?


6

Дзвінок

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

Початок

Запускає окреме вікно командного рядка для запуску визначеної програми чи команди. Використовується без параметрів, запуск відкриває друге вікно командного рядка. https://technet.microsoft.com/en-us/library/bb491005.aspx


-1

Це стара нитка, але я щойно зіткнувся з цією ситуацією і виявив акуратний шлях до неї. Я намагався запустити setup.exe, але фокус повертався до наступного рядка сценарію, не чекаючи закінчення setup.exe. Я спробував вищезазначені рішення не пощастило.

Зрештою, прошивка команди через більше зробила трюк.

setup.exe {аргументи} | більше

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.