Jak uruchomić wiele.Pliki BAT w pliku. BAT

Próbuję nakłonić Moje commit-build.bat do wykonania innych .Pliki BAT jako część naszego procesu budowania.

Zawartość commit-build.bat:

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

Wydaje się to dość proste, ale commit-build.bat wykonuje tylko pierwszą pozycję na liście (msbuild.bat).

Uruchomiłem każdy z plików osobno bez żadnych problemów.

Author: Darshan Rivka Whittle, 2009-07-09

13 answers

Użyj

call msbuild.bat
call unit-tests.bat
call deploy.bat

Gdy nie jest używane wywołanie, bieżący plik wsadowy zatrzymuje się i wywołany plik wsadowy rozpoczyna wykonywanie. Jest to osobliwe zachowanie sięgające wczesnych dni MS-DOS

 973
Author: Philippe Leybaert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 13:48:37

Wszystkie pozostałe odpowiedzi są poprawne: użyj call. na przykład:

 call "msbuild.bat"

Historia

W wersjach ancient dos nie było możliwe rekurencyjne wykonywanie plików wsadowych. Następnie wprowadzono polecenie call, które wywołało inną powłokę cmd do wykonania pliku wsadowego i zwróciło wykonanie z powrotem do wywołującej powłokę cmd po zakończeniu.

Oczywiście w późniejszych wersjach żadna inna powłoka cmd nie była już potrzebna.

W pierwszych dniach wiele plików wsadowych zależało od fakt, że wywołanie pliku wsadowego nie wróci do wywołującego pliku wsadowego. Zmiana tego zachowania bez dodatkowej składni spowodowałaby złamanie wielu systemów, takich jak systemy menu wsadowego (używanie plików wsadowych do struktur menu).

Jak w wielu przypadkach w przypadku Microsoftu, wsteczna kompatybilność jest więc powodem takiego zachowania.

Porady

Jeśli Twoje pliki wsadowe mają spacje w nazwach, użyj cudzysłowów wokół nazwy:

call "unit tests.bat"

Przy okazji: jeśli nie masz wszystkich nazwy plików wsadowych, można również użyć do tego: (nie gwarantuje poprawnej kolejności wywołań plików wsadowych, następuje kolejność systemu plików)

FOR %x IN (*.bat) DO call "%x"

Możesz również reagować na poziom błędów po wywołaniu. Użycie

exit /B 1   # or any other integer value in 0..255

Aby zwrócić błąd. 0 oznacza poprawne wykonanie. W wywołującym pliku wsadowym możesz zareagować używając

if errorlevel neq 0 <batch command>

Użyj if errorlevel 1 Jeśli masz starszy System Windows, a następnie NT4 / 2000 / XP, aby złapać wszystkie ERRORLEVEL 1 i większe.

Aby kontrolować przepływ pliku wsadowego, jest goto: - (

if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...

Jak zauważyli inni: przyjrzyjmy się systemom build, które zastępują pliki wsadowe.

 159
Author: Ralph M. Rickenbach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-26 11:44:45

Jeśli chcemy otworzyć wiersz wielu poleceń, możemy użyć

start cmd /k 

/k: jest obowiązkowy, który zostanie wykonany.

Uruchomienie wielu propmtów poleceń można wykonać jak poniżej.

start cmd /k Call rc_hub.bat 4444

start cmd /k Call rc_grid1.bat 5555

start cmd /k Call rc_grid1.bat 6666

start cmd /k Call rc_grid1.bat 5570.
 91
Author: farheen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-03 14:43:16

Try

call msbuild.bat
call unit-tests.bat
call deploy.bat
 36
Author: Jonathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 13:49:38

Wywołujesz wiele partii w celu skompilowania programu. Przyjmuję za pewnik, że jeśli wystąpi błąd:
1) program w partii zakończy się z błędem;
2) Chcesz o tym wiedzieć.

for %%b in ("msbuild.bat" "unit-tests.bat" "deploy.bat") do call %%b|| exit /b 1

'/ / ' sprawdza poziom błędu wyższy niż 0. W ten sposób wszystkie partie są wywoływane w kolejności, ale zatrzymają się przy każdym błędzie, pozostawiając ekran, jak to jest dla ciebie, aby zobaczyć każdy komunikat o błędzie.

 24
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-01 13:52:59
call msbuild.bat
call unit-tests.bat
call deploy.bat
 19
Author: butterchicken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 13:49:51

Aby wywołać plik {[1] } wewnątrz pliku .bat, Użyj

call foo.bat

(Tak, to głupie, byłoby bardziej sensowne, gdybyś mógł wywołać go za pomocą foo.bat, tak jak z wiersza polecenia, ale prawidłowym sposobem jest użycie call.)

 18
Author: Zifre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 13:50:30

Jeśli mamy 2 batch script aaa.bat & bbb.bat I call jak poniżej

call aaa.bat
call bbb.bat

Po wykonaniu skryptu wywoła aaa.najpierw bat i czekać na wątek aaa.bat Zakończ wtedy wywoła bbb.bat

Ale jeśli nie chcesz czekać aaa.bat kończy połączenie z bbb.bat, spróbuj użyć polecenia START

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/AFFINITY <hex affinity>] [/WAIT] [/B] [command/program]
  [parameters]

Egzamin:

start /b aaa.bat
start /b bbb.bat
 13
Author: user2314621,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-29 16:31:44

Patrząc na twoje nazwy plików, czy rozważałeś użycie narzędzia do budowania, takiego jak nant lub ant (wersja java). Uzyskasz o wiele większą kontrolę niż pliki bat

 7
Author: Dave Archer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-09 13:54:47
Start msbuild.bat
Start unit-tests.bat
Start deploy.bat

Jeśli to nie zadziała, zamień start na call lub spróbuj tego:

Start msbuild.bat
Goto :1
:1
Start unit-tests.bat
Goto :2
:2
Start deploy.bat
 5
Author: McOussKing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-15 14:44:22

Jeśli chcesz otworzyć wiele plików wsadowych na raz, możesz użyć polecenia call, jednak polecenie call zamyka bieżący plik bat i przechodzi do innego jeśli chcesz otworzyć wiele plików na raz, możesz spróbować tego

@echo off
start cmd "call ex1.bat&ex2.bat&ex3.bat" 

I tak dalej lub powtórz początek cmd "call..."dla wielu plików. działa to dla WIN 7 nie jestem pewien co do innych systemów.

 3
Author: CMS_95,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-24 14:29:05

Uruchamiając wiele skryptów w jednym miałem ten sam problem. Nie zdawałem sobie sprawy, że kończy się na pierwszym scenariuszu.

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

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

Usunąłem wszystkie 11 moich wierszy wyjścia skryptów i próbowałem ponownie i wszystkie 11 działało w kolejności po kolei w tym samym oknie poleceń.

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

::ScriptA.bat
Do Foo

::ScriptB.bat
Do bar
 2
Author: John Oliphant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-21 21:04:37

Użyj komendy call! Oto przykład:

call msbuild.bat
call unit-tests.bat
call deploy.bat
Zdrówko!
 1
Author: PryroTech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-13 04:45:53