Bir toplu komut dosyası içinden bir toplu komut dosyasını nasıl çalıştırırım?


99

Bir toplu komut dosyası içinden başka bir toplu komut dosyasını nasıl çağırırım?

Bir ififadeyle yürütülmesini istiyorum .

Yanıtlar:


227

Olduğu CALLgibi kullanın

CALL nameOfOtherFile.bat

Bu, mevcut toplu iş dosyasının yürütülmesini engeller (duraklatır) ve CALLdüzenlenmiş olanın tamamlanmasını bekler .

Engellemesini istemiyorsanız, STARTbunun yerine kullanın.

Cmd komut istemini kullanarak CALL /?veya kullanarak nitty-cesur ayrıntıları alın START /?.


23

Komut satırında çalıştırıyormuşsunuz gibi toplu komut dosyasını ada göre çağırabilirsiniz.

Öyleyse, bar.batdiyen bir dosyanız olduğunu echo This is bar.bat!ve onu bir dosyadan çağırmak istediğinizi varsayalım foo.bat, bunu içine yazabilirsiniz foo.bat:

if "%1"=="blah" bar

foo blahKomut satırından çalıştırın ve şunu göreceksiniz:

C:\>foo blah

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

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

Ancak dikkatli olun : Başka bir toplu komut dosyasından bir toplu komut dosyası çağırdığınızda, orijinal toplu komut dosyası çalışmayı durdurur. İkincil toplu komut dosyasını çalıştırmak ve ardından önceki toplu komut dosyasına geri dönmek isterseniz, callkomutu kullanmanız gerekir . Örneğin:

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

Bunun foo blahüzerinde koşarsan, şunu görürsün:

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

Kullanabilirsiniz

call script.bat

ya da sadece

script.bat

5
Betiğiniz içinde doğrudan başka bir betik çağırırsanız, çağrılan betikteki herhangi bir komutun sıfır olmayan bir değer (hata) döndürmesi durumunda, callee betiği de çalışmayı durdurur, kullanılırsa call, bir hatayla bile yürütülmesine devam eder. aranan komut dosyasında.
Bruno Finger

1

İşte örnek:

A.bat'ınız var:

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

ve b.bat a.bat'tan koşullu olarak çağrılır:

@echo off 
echo "This is b.bat"

1

Toplu iş dosyasını başka bir pencerede açmak isterseniz, kullanın start. Bu şekilde, temelde iki komut dosyasını aynı anda çalıştırabilirsiniz. Diğer bir deyişle, aradığınız komut dosyasının bitmesini beklemek zorunda değilsiniz. Aşağıdaki tüm örnekler işe yarar:

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

Komut dosyasının bitmesini beklemek istiyorsanız, deneyin start /w call batch.bat, ancak batch.bat ile bitmelidir exit.


Bu komut dosyalarının her birindeki tüm hataları ana komut dosyasının çıktısına döndürmenin bir yolu var mı?
gunslingor

0

Küçültülmüş durumda ayrı komut pencerelerinde paralel olarak çalıştırın

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

Aynı pencerede sırayla çalıştır

release.bat

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

-3

huh, nedenini bilmiyorum ama çağrı hile
call script.batyapmadı orijinal konsola geri dönmedi.
cmd /k script.batorijinal konsola geri döndü.


2
Çalışmayan kod ve çalışan kod da dahil olmak üzere neyin işe yaramadığını ve neyin işe yaradığını daha resmi bir şekilde açıklamak için sorunuzu düzenlemeyi düşünün
wundermahn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.