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 call
nodig.
Bij het starten van een andere batch is het een groot verschil,
aangezien call
het 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.
START
maakt 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 call
kunnen 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.
START
wordt 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.com
niet START iexplore.exe http://mywebsite.com
.
START myworddoc.docx
zou Microsoft Word starten en myworddoc.docx openen.CALL myworddoc.docx
doet hetzelfde… echter START
biedt 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 call
en start /wait
bij 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