2012-11-06 13 views
100

Wie ist der START-Befehl mit einer WAIT-OptionCALL-Befehl gegen START mit/WAIT Option

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

... anders aus CALL-Befehl?

CALL notepad.exe 
CALL notepad.exe 

Gibt es eine Situation, in der man sich anders verhalten kann als die andere abhängig davon, was ausgeführt wird?

+1

Werfen Sie einen Blick auf https://technet.microsoft.com/en-us/library/bb491005.aspx über START und https: //technet.microsoft.com/en-us/library/bb490873.aspx ist über CALL –

Antwort

117

Für exe-Dateien, nehme ich an, die Unterschiede sind fast unwichtig.
Aber um eine exe zu starten, brauchen Sie nicht einmal CALL.

Wenn eine andere Charge Start ist es ein großer Unterschied,
als CALL wird es im selben Fenster starten und die genannte Charge hat Zugriff auf die gleichen Variablen Kontext.
So kann es auch Variablen ändern, die den Anrufer betrifft.

START erstellt eine neue cmd.exe für den aufgerufenen Stapel und ohne/b wird ein neues Fenster geöffnet.
Da es sich um einen neuen Kontext handelt, können Variablen nicht gemeinsam genutzt werden.

Nachtrag:
Mit CALL können die Parameter ändern (für Batch-und EXE-Dateien), aber nur, wenn sie Carets oder Prozentzeichen enthalten.

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

Wird erweitert werden (innerhalb einer Batch-Datei)

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

Wenn Sie eine Datei.bat mit START/WAIT ausführen, müssen Sie START/WAIT cmd/c "file.bat" anstatt nur START angeben/WAIT "file.bat", ansonsten bleibt das für file.bat erstellte cmd-Fenster geöffnet – FrinkTheBrave

+3

Sie finden den Vergleich zwischen CALL und START unter: https://ss64.com/nt/start.html (heute aktualisiert mit sectio ns "Start/Wait" und "START vs CALL") –

10

denke ich, dass sie in der Regel das gleiche durchführen sollen, aber es gibt einige Unterschiede. wird im Allgemeinen verwendet, um Anwendungen zu starten oder die Standardanwendung für einen bestimmten Dateityp zu starten. Auf diese Weise, wenn Sie START http://mywebsite.com es nicht tun START iexplore.exe http://mywebsite.com.

START myworddoc.docx würde Microsoft Word starten und myworddoc.docx öffnen. CALL myworddoc.docx macht das gleiche ... aber START bietet mehr Optionen für den Fensterzustand und Dinge dieser Art. Außerdem können Prozesspriorität und -affinität festgelegt werden.

Kurz gesagt, angesichts der zusätzlichen Optionen, die von Start zur Verfügung gestellt werden, sollte es Ihr Werkzeug der Wahl sein.

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. 
5

Es ist ein nützlicher Unterschied zwischen call und start /wait wenn regsvr32.exe /s zum Beispiel Aufruf auch von Gary in in seiner Antwort verwies auf how-do-i-get-the-application-exit-code-from-a-windows-command-line

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

wird immer 0 zurück, aber

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

wird die Fehlerstufe von regsvr32 zurückgeben.exe

3

Anruf

Ruft eine Batchdatei von einem anderen ohne das übergeordnete Batch-Programm zu stoppen. Der Aufruf-Befehl akzeptiert Etiketten als Ziel des Aufrufs. Call hat keine Auswirkungen auf die Befehlszeile, wenn es außerhalb eines Skripts oder einer Batchdatei verwendet wird. https://technet.microsoft.com/en-us/library/bb490873.aspx

starten

Startet ein separaten Fenster Eingabeaufforderung ein bestimmtes Programm oder einen Befehl auszuführen. Wird ohne Parameter verwendet, öffnet Start ein zweites Eingabeaufforderungsfenster. https://technet.microsoft.com/en-us/library/bb491005.aspx

1

Dies ist, was ich parallel (mehrere Instanzen derselben bat-Datei zur gleichen Zeit mit verschiedenen Eingabeparameter) während des Laufens Batch-Dateien gefunden:

Lassen Sie uns sagen, dass Sie eine exe-Datei, die eine führt lange Aufgabe namens LongRunningTask.exe

Wenn Sie die exe direkt aus der bat-Datei aufrufen, wird nur der erste Aufruf der LongRunningTask erfolgreich, während der Rest einen Betriebssystemfehler erhalten wird "Datei wird bereits von dem Prozess verwendet"

Wenn Sie diesen Befehl verwenden:

Start/B/WAIT „“ „LongRunningTask.exe“ „Parameter“

können Sie mehrere Instanzen der Fledermaus und exe ausführen können, während immer noch für die Aufgabe wartet beenden, bevor der Schläger die restlichen Befehle ausführt. Die Option/B verhindert, dass ein anderes Fenster erstellt wird, die leeren Anführungszeichen sind erforderlich, damit der Befehl ausgeführt werden kann, siehe unten.

Beachten Sie, dass LongRunningTask zur gleichen Zeit ausgeführt wird wie die übrigen Befehle in der Batch-Datei, wenn Sie nicht/WAIT am Start verwenden. Dies kann zu Problemen führen, wenn einer dieser Befehle die Ausgabe erfordert LongRunningTask der

wieder aufnehmen:

Dieses KANN NICHT parallel laufen:

  • Anruf LongRunningTask.exe

Diese parallel laufen und wird in Ordnung so weit sein, da es keine Datenabhängigkeiten zwischen der Ausgabe des Befehls und der Rest der Datei Fledermaus sind:

  • Start/B „“ „LongRunningTask.exe“ " Parameter "

Dies wird für die Aufgabe parallel und warten laufen zu beenden, so können Sie die Ausgabe verwenden:

  • Start/B/WAIT """ LongRunningTask.exe“ "Parameter"

Referenz für den Startbefehl: How can I run a program from a batch file without leaving the console open after the program start?