886 Stimmen

Wie man mehrere BAT-Dateien innerhalb einer BAT-Datei ausführt

Ich versuche, meine commit-build.bat um andere .BAT-Dateien als Teil unseres Build-Prozesses auszuführen.

Inhalt der commit-build.bat :

"msbuild.bat"
"unit-tests.bat"
"deploy.bat"

Das scheint einfach zu sein, aber commit-build.bat führt nur den ersten Eintrag in der Liste aus ( msbuild.bat ).

Ich habe jede der Dateien einzeln ausgeführt, ohne dass es Probleme gab.

4 Stimmen

@sean - Sie müssen nicht das komplette Cygwin-Paket installieren, um die Kommandozeilenprogramme zum Laufen zu bringen. Nehmen Sie einfach alle Cygwin-Dlls aus dem Paket und legen Sie sie in ein Verzeichnis mit einem Pfad, legen Sie alle Ihre Tools in ein anderes Verzeichnis mit einem Pfad, und Sie sind bereit zu gehen.

0 Stimmen

Wenn man davon ausgeht, dass es sich bei jeder dieser Dateien nur um eine Stapelverarbeitung handelt, warum werden sie nicht einfach in eine große Datei eingefügt und die Timeout-Funktion verwendet, um jedes Mal zu starten.

3voto

robertcollier4 Punkte 702

Mit korrekten Anführungszeichen (dies kann manchmal schwierig sein):

start "" /D "C:\Program Files\ProgramToLaunch" "cmd.exe" "/c call ""C:\Program Files\ProgramToLaunch\programname.bat"""

1. Argument - Titel (in diesem Fall leer)
2. Argument - /D gibt das Startverzeichnis an, kann weggelassen werden, wenn das aktuelle Arbeitsverzeichnis verwendet werden soll (z.B. "%~dp0")
3. arg - zu startender Befehl, "cmd.exe".
4. arg - Argumente für den Befehl, mit doppelten Anführungszeichen für die Argumente darin (so werden Anführungszeichen innerhalb von Anführungszeichen im Batch ausgeblendet)

2voto

Leptonator Punkte 3206

Ich weiß, ich bin ein bisschen spät dran, aber hier ist eine andere Möglichkeit. Das heißt, diese Methode sollte warten, bis die erste erledigt ist, die zweite, und so weiter.

start "" /wait cmd.exe /c msbuild.bat
start "" /wait cmd.exe /c unit-tests.bat
start "" /wait cmd.exe /c deploy.bat

Das einzige Problem, das sich aus der Verwendung dieser Methode ergeben kann, ist, dass bei neuen Instanzen von cmd.exe, die erzeugt werden, die Fehlerprüfung in jeder Instanz von cmd.exe beibehalten wird.

Oder

start "" /wait call msbuild.bat
start "" /wait call unit-tests.bat
start "" /wait call deploy.bat

Ich hoffe, das hilft.

2voto

John Oliphant Punkte 21

Bei der Ausführung mehrerer Skripte in einem hatte ich das gleiche Problem. Ich habe es immer wieder auf dem ersten sterben nicht erkennen, dass es auf dem ersten Skript beendet wurde.

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

:: ScriptA.bat
Do Foo
EXIT
::ScriptB.bat
Do bar
EXIT

Ich entfernte alle 11 EXIT-Zeilen meiner Skripte und versuchte es erneut, und alle 11 liefen nacheinander im selben Befehlsfenster.

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

::ScriptA.bat
Do Foo

::ScriptB.bat
Do bar

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X