Wie führe ich ein Batch-Skript in einem Batch-Skript aus?


97

Wie rufe ich ein anderes Batch-Skript innerhalb eines Batch-Skripts auf?

Ich möchte, dass es in einer ifAnweisung ausgeführt wird.

Antworten:


219

Verwenden Sie CALLwie in

CALL nameOfOtherFile.bat

Dadurch wird die Ausführung der aktuellen Batchdatei blockiert (angehalten) und es wird gewartet, bis die CALLed- Datei abgeschlossen ist.

Wenn Sie nicht möchten, dass es blockiert, verwenden Sie STARTstattdessen.

Holen Sie sich die winzigsten Details durch die Verwendung CALL /?oder START /?von der Befehlszeile aus .


22

Sie können das Batch-Skript einfach nach Namen aufrufen, als würden Sie in der Befehlszeile ausgeführt.

Angenommen, Sie haben eine Datei mit bar.batder Aufschrift echo This is bar.bat!und möchten sie aus einer Datei aufrufen. foo.batSie können dies in Folgendes schreiben foo.bat:

if "%1"=="blah" bar

Führen Sie foo blahdie Befehlszeile aus, und Sie werden sehen:

C:\>foo blah

C:\>if "blah" == "blah" bar

C:\>echo This is bar.bat!
This is bar.bat!

Aber Vorsicht : Wenn Sie ein Batch-Skript von einem anderen Batch-Skript aus aufrufen, wird das ursprüngliche Batch-Skript nicht mehr ausgeführt. Wenn Sie das sekundäre Batch-Skript ausführen und dann zum vorherigen Batch-Skript zurückkehren möchten, müssen Sie den callBefehl verwenden. Beispielsweise:

if "%1"=="blah" call bar
echo That's all for foo.bat!

Wenn Sie darauf laufen foo blah, würden Sie sehen:

C:\>foo blah

C:\>if "blah" == "blah" call bar

C:\>echo This is bar.bat!
This is bar.bat!

C:\>echo That's all for foo.bat!
That's all for foo.bat!


2

Sie können verwenden

call script.bat

oder nur

script.bat

5
Wenn Sie ein anderes Skript direkt in Ihrem Skript aufrufen und ein Befehl im aufgerufenen Skript einen Wert ungleich Null (Fehler) zurückgibt, wird die Ausführung des Angerufenen-Skripts ebenfalls gestoppt. Bei Verwendung callwird die Ausführung auch mit einem Fehler fortgesetzt im aufgerufenen Skript.
Bruno Finger

1

Hier ist ein Beispiel:

Sie haben a.bat:

@echo off
if exist b.bat goto RUNB
goto END
:RUNB
b.bat
:END

und b.bat bedingt von a.bat aufgerufen:

@echo off 
echo "This is b.bat"

1

Wenn Sie die Batchdatei in einem anderen Fenster öffnen möchten, verwenden Sie start. Auf diese Weise können Sie grundsätzlich zwei Skripte gleichzeitig ausführen. Mit anderen Worten, Sie müssen nicht auf das Skript warten, das Sie gerade aufgerufen haben, um fertig zu werden. Alle folgenden Beispiele funktionieren:

start batch.bat
start call batch.bat
start cmd /c batch.bat

Wenn Sie warten möchten, bis das Skript fertig ist, versuchen Sie es start /w call batch.bat, aber die Datei batch.bat muss mit enden exit.


Gibt es eine Möglichkeit, alle Fehler von jedem dieser Skripte zurück zur Ausgabe des Hauptskripts zu leiten?
Revolverheld

0

Parallel in separaten Befehlsfenstern im minimierten Zustand ausführen

dayStart.bat

start "startOfficialSoftwares" /min cmd /k call startOfficialSoftwares.bat
start "initCodingEnvironment" /min cmd /k call initCodingEnvironment.bat
start "updateProjectSource" /min cmd /k call updateProjectSource.bat
start "runCoffeeMachine" /min cmd /k call runCoffeeMachine.bat

Nacheinander im selben Fenster ausführen

release.bat

call updateDevelVersion.bat
call mergeDevelIntoMaster.bat
call publishProject.bat

-3

huh, ich weiß nicht warum, aber call hat den Trick
call script.batnicht gemacht und ist nicht zur ursprünglichen Konsole zurückgekehrt.
cmd /k script.batkehrte zur ursprünglichen Konsole zurück.


2
Überlegen Sie, Ihre Frage zu bearbeiten, um formeller zu erklären, was nicht funktioniert hat und was nicht, einschließlich des nicht funktionierenden Codes und des
Arbeitscodes
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.