Bagaimana cara menjalankan skrip batch dari dalam skrip batch?


97

Bagaimana cara memanggil skrip batch lain dari dalam skrip batch?

Saya ingin itu dieksekusi dalam sebuah ifpernyataan.

Jawaban:


222

Gunakan CALLseperti dalam

CALL nameOfOtherFile.bat

Ini akan memblokir (menghentikan sementara) eksekusi dari file batch saat ini, dan itu akan menunggu sampai CALLed selesai.

Jika Anda tidak ingin memblokir, gunakan STARTsaja.

Dapatkan detailnya dengan menggunakan CALL /?atau START /?dari prompt cmd.


22

Anda bisa menjalankan skrip batch dengan nama, seolah-olah Anda menjalankan pada baris perintah.

Jadi, misalkan Anda memiliki file bar.batyang mengatakan echo This is bar.bat!dan ingin memanggilnya dari file foo.bat, Anda dapat menulis ini di foo.bat:

if "%1"=="blah" bar

Jalankan foo blahdari baris perintah, dan Anda akan melihat:

C:\>foo blah

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

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

Namun berhati-hatilah : Saat Anda menjalankan skrip batch dari skrip batch lain, skrip batch asli akan berhenti berjalan. Jika Anda ingin menjalankan skrip batch sekunder dan kemudian kembali ke skrip batch sebelumnya, Anda harus menggunakan callperintah. Sebagai contoh:

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

Jika Anda menjalankannya foo blah, Anda akan melihat:

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

Kamu bisa memakai

call script.bat

atau hanya

script.bat

5
Jika Anda secara langsung memanggil skrip lain di dalam skrip Anda, jika ada perintah dalam skrip yang dipanggil mengembalikan nilai bukan nol (kesalahan), skrip callee juga akan berhenti untuk dieksekusi, jika digunakan call, ia akan melanjutkan eksekusinya bahkan dengan kesalahan dalam skrip yang disebut.
Bruno Finger

1

Berikut contohnya:

Anda memiliki a.bat:

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

dan b.bat dipanggil dengan syarat dari a.bat:

@echo off 
echo "This is b.bat"

1

Jika Anda ingin membuka file batch di jendela lain, gunakan start. Dengan cara ini, pada dasarnya Anda dapat menjalankan dua skrip pada saat yang bersamaan. Dengan kata lain, Anda tidak perlu menunggu skrip yang baru saja Anda panggil selesai. Semua contoh di bawah berfungsi:

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

Jika Anda ingin menunggu skrip selesai, coba start /w call batch.bat, tetapi batch.bat harus diakhiri dengan exit.


Apakah ada cara untuk menyalurkan semua kesalahan dari masing-masing skrip ini kembali ke keluaran skrip utama?
Gunsling atau

0

Jalankan secara paralel di jendela perintah terpisah dalam keadaan diminimalkan

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

Jalankan secara berurutan di jendela yang sama

release.bat

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

-3

huh, saya tidak tahu mengapa, tetapi panggilan tidak berhasil, triknya
call script.battidak kembali ke konsol asli.
cmd /k script.batkembali ke konsol aslinya.


2
Pertimbangkan untuk mengedit pertanyaan Anda untuk menjelaskan secara lebih formal apa yang tidak berhasil dan apa yang berhasil, termasuk kode yang tidak berfungsi dan kode yang berfungsi
wundermahn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.