Jak uruchomić skrypt wsadowy z poziomu skryptu wsadowego?


97

Jak wywołać inny skrypt wsadowy z poziomu skryptu wsadowego?

Chcę, aby był wykonywany w ifoświadczeniu.

Odpowiedzi:


222

Użyj CALLjak w

CALL nameOfOtherFile.bat

Spowoduje to zablokowanie (wstrzymanie) wykonywania bieżącego pliku wsadowego i zaczeka do zakończenia CALLedycji.

Jeśli nie chcesz, aby blokował, użyj STARTzamiast tego.

Uzyskaj szczegółowe informacje, używając CALL /?lub START /?z wiersza polecenia cmd.


22

Możesz po prostu wywołać skrypt wsadowy według nazwy, tak jakbyś działał w wierszu poleceń.

Załóżmy więc, że masz plik, bar.batktóry mówi echo This is bar.bat!i chcesz go wywołać z pliku foo.bat, możesz zapisać to w foo.bat:

if "%1"=="blah" bar

Uruchom foo blahz wiersza poleceń, a zobaczysz:

C:\>foo blah

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

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

Ale uwaga : gdy wywołasz skrypt wsadowy z innego skryptu wsadowego, oryginalny skrypt wsadowy przestanie działać. Jeśli chcesz uruchomić dodatkowy skrypt wsadowy, a następnie powrócić do poprzedniego skryptu wsadowego, musisz użyć callpolecenia. Na przykład:

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

Jeśli na tym uruchomisz foo blah, zobaczysz:

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

Możesz użyć

call script.bat

Lub tylko

script.bat

5
Jeśli bezpośrednio wywołasz inny skrypt w swoim skrypcie, w przypadku, gdy jakiekolwiek polecenie w wywołanym skrypcie zwróci wartość niezerową (błąd), wywoływany skrypt również przestanie działać, gdzie użycie callbędzie kontynuowało wykonywanie nawet z błędem w wywołanym skrypcie.
Bruno Finger

1

Oto przykład:

Masz bat:

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

i b. bat wywołany warunkowo z a.bat:

@echo off 
echo "This is b.bat"

1

Jeśli chcesz otworzyć plik wsadowy w innym oknie, użyj start . W ten sposób możesz w zasadzie uruchamiać dwa skrypty jednocześnie. Innymi słowy, nie musisz czekać na zakończenie wywoływanego skryptu. Wszystkie poniższe przykłady działają:

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

Jeśli chcesz poczekać na zakończenie działania skryptu, spróbuj start /w call batch.bat, ale plik batch.bat musi kończyć się na exit.


Czy istnieje sposób na przesłanie wszystkich błędów z każdego z tych skryptów z powrotem do danych wyjściowych skryptu głównego?
Gunslingor

0

Uruchom równolegle w oddzielnych oknach poleceń w stanie zminimalizowanym

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

Uruchom sekwencyjnie w tym samym oknie

release.bat

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

-3

huh, nie wiem dlaczego, ale połączenie nie zadziałało,
call script.batnie powróciło do oryginalnej konsoli.
cmd /k script.batpowrócił do oryginalnej konsoli.


2
Rozważ zmianę swojego pytania, aby bardziej formalnie wyjaśnić, co nie zadziałało, a co zadziałało, w tym niedziałający kod i działający kod
wundermahn
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.