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.
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
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.
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.
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
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.
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
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
.)
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
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
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
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.
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
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!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