Jak wywołać inny skrypt wsadowy z poziomu skryptu wsadowego?
Chcę, aby był wykonywany w if
oświadczeniu.
Odpowiedzi:
Użyj CALL
jak w
CALL nameOfOtherFile.bat
Spowoduje to zablokowanie (wstrzymanie) wykonywania bieżącego pliku wsadowego i zaczeka do zakończenia CALL
edycji.
Jeśli nie chcesz, aby blokował, użyj START
zamiast tego.
Uzyskaj szczegółowe informacje, używając CALL /?
lub START /?
z wiersza polecenia cmd.
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.bat
któ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 blah
z 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ć call
polecenia. 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!
Powinieneś użyć CALL
CALL batch.bat
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
.
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
release.bat
call updateDevelVersion.bat
call mergeDevelIntoMaster.bat
call publishProject.bat
huh, nie wiem dlaczego, ale połączenie nie zadziałało,
call script.bat
nie powróciło do oryginalnej konsoli.
cmd /k script.bat
powrócił do oryginalnej konsoli.
call
będzie kontynuowało wykonywanie nawet z błędem w wywołanym skrypcie.