Jak wywołać inny skrypt wsadowy z poziomu skryptu wsadowego?
Chcę, aby był wykonywany w ifoświadczeniu.
Odpowiedzi:
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.
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!
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.batnie powróciło do oryginalnej konsoli.
cmd /k script.batpowrócił do oryginalnej konsoli.
callbędzie kontynuowało wykonywanie nawet z błędem w wywołanym skrypcie.