Wie ist der START-Befehl mit einer WAIT-Option
START /wait notepad.exe
START /wait notepad.exe
... etwas anderes als ein CALL-Befehl?
CALL notepad.exe
CALL notepad.exe
Gibt es eine Situation, in der sich einer anders verhält als der andere, abhängig davon, was ausgeführt wird?
windows
batch-file
Tschad
quelle
quelle
Antworten:
Für exe- Dateien sind die Unterschiede vermutlich nahezu unwichtig.
Aber um eine Exe zu starten , brauchst du nicht einmal
CALL
.Wenn Sie einen anderen Stapel starten, ist dies ein großer Unterschied,
da
CALL
er im selben Fenster gestartet wird und der aufgerufene Stapel Zugriff auf denselben variablen Kontext hat.So können auch Variablen geändert werden, die sich auf den Aufrufer auswirken.
START
erstellt eine neue cmd.exe für den aufgerufenen Stapel und öffnet ohne / b ein neues Fenster.Da es sich um einen neuen Kontext handelt, können Variablen nicht gemeinsam genutzt werden.
Unterschiede
Verwenden
start /wait <prog>
- Änderungen von Umgebungsvariablen gehen verloren, wenn das Ende
<prog>
endet.- Der Anrufer wartet, bis das
<prog>
beendet istVerwenden von
call <prog>
- Für exe kann es weggelassen werden, da es gleichbedeutend mit dem Starten ist.
<prog>
- Für ein Exe-Prog wartet oder startet der Aufrufer-Batch die Exe asynchron, aber das Verhalten hängt von der Exe selbst ab.
- Bei Batch- Dateien wird der Aufrufer-Stapel fortgesetzt. Wenn der Aufruf
<batch-file>
beendet ist, kehrt das Steuerelement OHNE Aufruf nicht zum Aufrufer-Stapel zurückNachtrag:
Mit
CALL
kann können die Parameter (für Batch- und Exe-Dateien) geändert werden, jedoch nur, wenn sie Carets oder Prozentzeichen enthalten.Wird erweitert auf (aus einer Batch-Datei)
quelle
start /wait /b cmd /c <batchfile.bat>
weil die Batch-Dateien nacheinander im selben Befehlsfenster ausgeführt werdencall batchfile.bat
Ich denke, dass sie im Allgemeinen die gleiche Leistung erbringen sollten, aber es gibt einige Unterschiede.
START
wird im Allgemeinen zum Starten von Anwendungen oder zum Starten der Standardanwendung für einen bestimmten Dateityp verwendet. Auf diese Weise, wenn SieSTART http://mywebsite.com
es nicht tunSTART iexplore.exe http://mywebsite.com
.START myworddoc.docx
würde Microsoft Word starten und myworddoc.docx öffnen.CALL myworddoc.docx
macht das gleiche ...START
bietet jedoch mehr Optionen für den Fensterzustand und solche Dinge. Außerdem können Prozesspriorität und -affinität festgelegt werden.Kurz gesagt, angesichts der zusätzlichen Optionen, die start bietet, sollte es das Werkzeug Ihrer Wahl sein.
quelle
Es gibt einen nützlichen Unterschied zwischen
call
undstart /wait
beim Aufrufen,regsvr32.exe /s
auf den beispielsweise Gary in seiner Antwort auf die Frage hinweist, wie ich den Anwendungs-Exit-Code aus einer Windows-Befehlszeile erhaltewird aber immer 0 zurückgeben
gibt die Fehlerstufe von regsvr32.exe zurück
quelle
Folgendes habe ich beim parallelen Ausführen von Batch-Dateien gefunden (mehrere Instanzen derselben Bat-Datei gleichzeitig mit unterschiedlichen Eingabeparametern):
Nehmen wir an, Sie haben eine exe-Datei, die eine lange Aufgabe namens LongRunningTask.exe ausführt
Wenn Sie die exe direkt aus der bat-Datei aufrufen, ist nur der erste Aufruf der LongRunningTask erfolgreich, während der Rest den Betriebssystemfehler "Datei wird bereits vom Prozess verwendet" erhält.
Wenn Sie diesen Befehl verwenden:
start / B / WAIT "" LongRunningTask.exe "" Parameter "
Sie können mehrere Instanzen von bat und exe ausführen, während Sie noch auf den Abschluss der Aufgabe warten, bevor der bat die verbleibenden Befehle weiter ausführt. Mit der Option / B soll vermieden werden, dass ein weiteres Fenster erstellt wird. Die leeren Anführungszeichen werden benötigt, damit der Befehl funktioniert (siehe Referenz unten).
Beachten Sie, dass, wenn Sie / WAIT zu Beginn nicht verwenden, die LongRunningTask gleichzeitig mit den verbleibenden Befehlen in der Batchdatei ausgeführt wird. Daher kann es zu Problemen kommen, wenn einer dieser Befehle die Ausgabe der LongRunningTask erfordert
Wiederaufnahme:
Das kann nicht parallel laufen:
Dies läuft parallel und ist in Ordnung, sofern keine Datenabhängigkeiten zwischen der Ausgabe des Befehls und dem Rest der bat-Datei bestehen:
Dies wird parallel ausgeführt und wartet, bis die Aufgabe abgeschlossen ist, sodass Sie die Ausgabe verwenden können:
Referenz für den Startbefehl: Wie kann ich ein Programm aus einer Batchdatei ausführen, ohne die Konsole nach dem Programmstart geöffnet zu lassen?
quelle
Anruf
Ruft ein Stapelverarbeitungsprogramm von einem anderen auf, ohne das übergeordnete Stapelverarbeitungsprogramm zu stoppen. Der Aufrufbefehl akzeptiert Beschriftungen als Ziel des Anrufs. Aufruf hat keine Auswirkung auf die Befehlszeile, wenn er außerhalb eines Skripts oder einer Batchdatei verwendet wird. https://technet.microsoft.com/en-us/library/bb490873.aspx
Anfang
Startet ein separates Eingabeaufforderungsfenster , um ein bestimmtes Programm oder einen bestimmten Befehl auszuführen. Wird ohne Parameter verwendet, öffnet start ein zweites Eingabeaufforderungsfenster. https://technet.microsoft.com/en-us/library/bb491005.aspx
quelle
Dies ist ein alter Thread, aber ich bin gerade auf diese Situation gestoßen und habe einen ordentlichen Weg gefunden, um sie zu umgehen. Ich habe versucht, eine setup.exe auszuführen, aber der Fokus lag darauf, zur nächsten Zeile des Skripts zurückzukehren, ohne auf den Abschluss der setup.exe zu warten. Ich habe die oben genannten Lösungen ohne Glück ausprobiert.
Am Ende hat es den Trick geschafft, den Befehl durch mehr zu leiten.
setup.exe {Argumente} | Mehr
quelle