Verschiedene Möglichkeiten, eine Windows-Batchdatei von einer anderen oder von der Eingabeaufforderung aus aufzurufen. Welches in welchem ​​Fall?


91

Eine Windows-Batchdatei ( called.batoder called.cmd) kann auf verschiedene Arten von einer anderen Batchdatei ( caller.batoder caller.cmd) oder einer interaktiven Eingabeaufforderung cmd.exe aufgerufen werden:

  1. Direktwahl: called.bat
  2. Verwenden des Aufrufbefehls: call called.bat
  3. mit dem Befehl cmd: cmd /c called.bat
  4. mit dem Startbefehl: start called.bat

Ich bin ziemlich in Schwierigkeiten, ihre beabsichtigte Verwendung anhand ihres Hilfetextes zu unterscheiden: Wann soll welche verwendet werden? zB warum ich den Befehl 'call' anstelle des direkten Anrufs verwenden könnte. Was ist unterschiedlich?

Ich interessiere mich für einen zusammenfassenden Bericht, der alle 4 Möglichkeiten (und andere, falls vorhanden) unter verschiedenen Gesichtspunkten analysiert: empfohlene Anwendungsfälle, für die sie geeignet sind, Prozesslaichen, Ausführungskontext, Umgebung, Verarbeitung von Rückkehrcode.

Hinweis: Ich verwende Windows XP SP3.

Antworten:


100
  1. Die Batchdatei wird von der aktuellen cmd.exe-Instanz ausgeführt (oder von einer neuen cmd.exe-Instanz, wenn Sie beispielsweise im Explorer doppelklicken).

  2. Wie # 1, wirkt sich nur aus, wenn es in einer Batch- / Cmd-Datei verwendet wird. In einer Batchdatei ohne 'Aufruf' endet die übergeordnete Batchdatei und die Steuerung wird an die aufgerufene Batchdatei übergeben. Mit 'call' wird die untergeordnete Batchdatei ausgeführt, und die übergeordnete Batchdatei wird mit den Anweisungen nach dem Aufruf fortgesetzt.

  3. Führt die Batchdatei in einer neuen cmd.exe-Instanz aus.

  4. Start führt die Batchdatei in einer neuen cmd.exe-Instanz in einem neuen Fenster aus, und der Aufrufer wartet nicht auf den Abschluss.


7
Hinweis für Option 4, auf den Startbefehl sollte immer ein 'Titel' folgen. Wenn Sie also keinen Titel benötigen, sollten Sie leere doppelte Anführungszeichen haben, z. B.start "" [options] command
Daryn

@Daryn dieser Link erwähnt lediglich, dass Sie immer einen haben sollten, sagt aber sogar, dass Microsoft den Parameter als optional beschreibt. Sie sagen mir nicht, warum es "erforderlich" sein sollte. Sogar einige ihrer Beispiele unten lassen den Titelparameter weg.
Adam Plocher

5

Eine Sache , nicht aus den Kommentaren hier klar: Wenn Sie eine Batch - Datei von einem anderen Anruf , indem Sie nur den Namen (Fall # 1 in der ursprünglichen Frage), wird die Ausführung stoppt von der anrufenden Batch - Datei. Zum Beispiel in diesen Zeilen:

called.bat
echo Hello

Die Zeile 'echo Hello' (und alles, was darauf folgt) wird nicht aufgerufen. Wenn Sie das Schlüsselwort 'call' verwenden, wird die Ausführung nach dem Aufruf fortgesetzt. Also in diesem Fall:

call called.bat
echo Hello

Die Zeile 'echo Hello' wird aufgerufen.

Darüber hinaus werden alle in der Datei named.bat festgelegten Variablen auch an den aufrufenden Prozess zurückgegeben.

Stellen Sie sich eine Datei 'named.bat' mit dieser Zeile vor:

set MYVAR=hello

Dann wäre% MYVAR% für die aufrufende Batchdatei verfügbar, wenn Folgendes verwendet würde:

call called.bat

Aber es würde nicht verwenden

REM starts a new cmd.exe process
start called.bat   

REM stops and replaces current cmd.exe process with a new one
called.bat        
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.