CALL commando vs. START met /WAIT optie

Hoe is het START-commando met een WAIT-optie

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

…anders dan het gebruik van een CALL-opdracht?

CALL notepad.exe 
CALL notepad.exe 

Is er een situatie waarin de een zich anders gedraagt dan de ander, afhankelijk van wat er wordt uitgevoerd?


Antwoord 1, autoriteit 100%

Voor exe-bestanden veronderstel ik dat de verschillen bijna onbelangrijk zijn.
Maar om een exete starten heb je niet eens callnodig.

Bij het starten van een andere batch is het een groot verschil,
aangezien callhet in hetzelfde venster zal starten en de aangeroepen batch toegang heeft tot dezelfde variabele context.
Het kan dus ook variabelen wijzigen die van invloed zijn op de beller.

STARTmaakt een nieuwe cmd.exe aan voor de aangeroepen batch en zonder /b opent het een nieuw venster.
Omdat het een nieuwe context is, kunnen variabelen niet worden gedeeld.

Verschillen

Gebruik start /wait <prog>
– Wijzigingen van omgevingsvariabelen gaan verloren wanneer de <prog>eindigt
– De beller wacht tot de <prog>klaar is

Met call <prog>
– Voor exekan het worden weggelaten, omdat het gelijk is aan het starten van <prog>
– Voor een exe-progwacht of start de beller-batch de exeasynchroon, maar het gedrag hangt af van de exezelf.
– Voor batch-bestanden gaat de batch van de beller verder, wanneer de aangeroepen <batch-file>eindigt, ZONDER aanroep zal de besturing niet terugkeren naar de batch van de beller

Aanvulling:

Met callkunnen de parameters worden gewijzigd (voor batch- en exe-bestanden), maar alleen als ze carets of procenttekens bevatten.

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

Wordt uitgebreid naar (vanuit een batchbestand)

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

Antwoord 2, autoriteit 9%

Ik denk dat ze over het algemeen hetzelfde zouden moeten presteren, maar er zijn enkele verschillen.
STARTwordt over het algemeen gebruikt om applicaties te starten of om de standaardapplicatie voor een bepaald bestandstype te starten. Op die manier doet het START iexplore.exe http://mywebsite.comniet START iexplore.exe http://mywebsite.com.

START myworddoc.docxzou Microsoft Word starten en myworddoc.docx openen.CALL myworddoc.docxdoet hetzelfde… echter STARTbiedt meer opties voor de vensterstatus en dergelijke. Het maakt het ook mogelijk om procesprioriteit en affiniteit in te stellen.

Kortom, gezien de extra opties die start biedt, zou dit je favoriete tool moeten zijn.

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.

Antwoord 3, autoriteit 6%

Er is een handig verschil tussen callen start /waitbij het aanroepen van bijvoorbeeld regsvr32.exe /s, waarnaar ook wordt verwezen door Gary in
in zijn antwoord op hoe- doe-ik-haal-de-toepassing-afsluitcode-van-een-windows-opdrachtregel

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

zal altijd 0 retourneren, maar

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

retourneert het foutniveau van regsvr32.exe


Antwoord 4, autoriteit 4%

Dit is wat ik vond toen ik batchbestanden parallel uitvoerde (meerdere exemplaren van hetzelfde bat-bestand tegelijkertijd met verschillende invoerparameters):

Stel dat je een exe-bestand hebt dat een lange taak uitvoert met de naam
LongRunningTask.exe

Als je de exe rechtstreeks vanuit het bat-bestand aanroept, zal alleen de eerste aanroep van de LongRunningTask slagen, terwijl de rest een OS-fout krijgt “Bestand is al in gebruik door het proces”

Als je dit commando gebruikt:

start /B /WAIT “” “LongRunningTask.exe” “parameters”

Je kunt meerdere instanties van de bat en exe uitvoeren, terwijl je nog steeds wacht tot de taak is voltooid voordat de bat doorgaat met het uitvoeren van de resterende opdrachten. De /B-optie is om te voorkomen dat er nog een venster wordt gemaakt, de lege aanhalingstekens zijn nodig om het commando te laten werken, zie de referentie hieronder.

Houd er rekening mee dat als u de /WAIT in het begin niet gebruikt, de LongRunningTask tegelijkertijd wordt uitgevoerd met de resterende opdrachten in het batchbestand, dus het kan problemen veroorzaken als een van deze opdrachten de uitvoer vereist van de LongRunningTask

Hervatten:

Dit kan niet parallel lopen:

  • bel LongRunningTask.exe

Dit zal parallel lopen en zal in orde zijn zolang er geen gegevensafhankelijkheden zijn tussen de uitvoer van het commando en de rest van het bat-bestand :

  • start /B “” “LongRunningTask.exe” “parameters”

Dit wordt parallel uitgevoerd en wacht tot de taak is voltooid, zodat u de uitvoer kunt gebruiken:

  • start /B /WAIT “” “LongRunningTask.exe” “parameters”

Referentie voor de startopdracht: Hoe kan ik een programma uitvoeren vanuit een batchbestand zonder de console open te laten nadat het programma is gestart?


Antwoord 5, autoriteit 3%

Bel

Belt het ene batchprogramma van het andere zonder het bovenliggende batchprogramma te stoppen.De oproepopdracht accepteert labels als het doel van de oproep. Aanroep heeft geen effect op de opdrachtregel bij gebruik buiten een script of batchbestand.
https://technet.microsoft.com/en-us/library/bb490873.aspx

Begin

Start een apart opdrachtpromptvensterom een gespecificeerd programma of commando uit te voeren. Gebruikt zonder parameters, start opent een tweede opdrachtpromptvenster.
https://technet.microsoft.com/en-us/library/bb491005.aspx


Antwoord 6

Dit is een oude thread, maar ik ben deze situatie net tegengekomen en heb er een handige manier voor gevonden. Ik probeerde een setup.exe uit te voeren, maar de focus keerde terug naar de volgende regel van het script zonder te wachten tot setup.exe klaar was. Ik heb de bovenstaande oplossingen geprobeerd zonder geluk.

Uiteindelijk is het gelukt om het commando door meer te leiden.

setup.exe {argumenten} | meer

Other episodes