Bagaimana menjalankan beberapa .BAT file di dalam .BAT file

I'm mencoba untuk mendapatkan saya komit membangun.bat untuk mengeksekusi lain .BAT sebagai bagian dari proses membangun.

Kandungan komit membangun.bat:

"msbuild.bat"
"unit-tests.bat"
"deploy.bat"

Ini tampaknya cukup sederhana, tapi komit membangun.bat hanya mengeksekusi item pertama dalam daftar (msbuild.bat).

Saya telah menjalankan masing-masing file yang terpisah dengan tidak ada masalah.

Mengomentari pertanyaan (2)
Larutan

Gunakan:

call msbuild.bat
call unit-tests.bat
call deploy.bat

Bila tidak menggunakan CALL, saat ini berkas batch berhenti dan disebut batch file mulai mengeksekusi. It's perilaku aneh dating kembali ke awal MS-DOS hari.

Komentar (8)

Semua jawaban benar: menggunakan call. Misalnya:

 call "msbuild.bat"

Sejarah

Dalam kuno DOS versi itu tidak mungkin untuk secara rekursif execute batch file. Kemudian memanggil perintah diperkenalkan yang disebut lain cmd shell untuk menjalankan file batch dan kembali eksekusi kembali ke panggilan cmd shell ketika selesai.

Jelas di versi lain cmd shell diperlukan lagi.

Di hari-hari awal banyak batch file tergantung pada fakta bahwa pemanggilan sebuah file batch tidak akan kembali untuk memanggil file batch. Mengubah perilaku tersebut, tanpa tambahan sintaks akan rusak banyak sistem seperti batch sistem menu (menggunakan batch file untuk menu struktur).

Seperti dalam banyak kasus dengan Microsoft, kompatibilitas karena itu adalah alasan untuk perilaku ini.

Tips

Jika anda batch file yang memiliki spasi di nama mereka, gunakan tanda kutip nama:

call "unit tests.bat"

Dengan cara: jika anda tidak memiliki semua nama-nama file batch, anda juga bisa menggunakan untuk untuk melakukan hal ini (itu tidak menjamin urutan yang benar dari file batch panggilan; mengikuti urutan file system):

FOR %x IN (*.bat) DO call "%x"

Anda juga dapat bereaksi pada errorlevels setelah panggilan. Gunakan:

exit /B 1   # Or any other integer value in 0..255

untuk memberikan kembali errorlevel. 0 menunjukkan pelaksanaan yang benar. Dalam pemanggilan file batch anda dapat bereaksi menggunakan

if errorlevel neq 0 

Gunakan jika errorlevel 1 jika anda memiliki lebih tua dari Windows NT4/2000/XP untuk menangkap semua errorlevels 1 dan lebih besar.

Untuk mengontrol aliran dari suatu file batch, ada goto :-(

if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...

Seperti orang-orang lain menunjukkan: silahkan lihat pada membangun sistem untuk menggantikan file batch.

Komentar (3)

Jika kita ingin membuka beberapa command prompt maka kita bisa menggunakan

start cmd /k

/k: wajib yang akan mengeksekusi.

Meluncurkan banyak command prompt dapat dilakukan sebagai berikut.

start cmd /k Call rc_hub.bat 4444

start cmd /k Call rc_grid1.bat 5555

start cmd /k Call rc_grid1.bat 6666

start cmd /k Call rc_grid1.bat 5570.
Komentar (9)

Coba:

call msbuild.bat
call unit-tests.bat
call deploy.bat
Komentar (0)

Anda menelepon beberapa batch dalam upaya untuk menyusun sebuah program. Aku mengambil untuk diberikan bahwa jika terjadi kesalahan:

  1. program dalam batch akan keluar dengan errorlevel;
  2. Anda ingin tahu tentang hal itu.
for %%b in ("msbuild.bat" "unit-tests.bat" "deploy.bat") do call %%b|| exit /b 1

'||' tes untuk errorlevel lebih tinggi dari 0. Dengan cara ini semua batch yang disebut dalam rangka, tetapi akan berhenti di setiap kesalahan, meninggalkan layar seperti itu adalah untuk anda untuk melihat pesan kesalahan.

Komentar (0)
call msbuild.bat
call unit-tests.bat
call deploy.bat
Komentar (0)

Jika kita memiliki dua batch script, aaa.bat dan bbb.bat, dan memanggil seperti di bawah ini

call aaa.bat
call bbb.bat

Ketika menjalankan script, ia akan memanggil aaa.kelelawar pertama, menunggu benang dari aaa.bat menghentikan, dan panggilan bbb.bat.

Tapi jika anda don't ingin menunggu untuk aaa.bat untuk mengakhiri panggilan bbb.bat, cobalah untuk menggunakan START perintah:

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/AFFINITY ] [/WAIT] [/B] [command/program]
  [parameters]

Ujian:

start /b aaa.bat
start /b bbb.bat
Komentar (0)

Untuk memanggil .bat file dalam .bat file, gunakan

call foo.bat

(Ya, ini konyol, itu akan membuat lebih masuk akal jika anda bisa menyebutnya dengan foo.bat, seperti yang anda bisa dari command prompt, tapi cara yang benar adalah dengan menggunakan panggil.)

Komentar (0)

Melihat nama file, anda telah dianggap menggunakan build tool seperti NAnt atau Semut (versi Jawa). Anda'll mendapatkan kontrol yang lebih banyak dibandingkan dengan bat file.

Komentar (0)
Start msbuild.bat
Start unit-tests.bat
Start deploy.bat

Jika itu doesn't bekerja, menggantikan start dengan panggilan atau coba ini:

Start msbuild.bat
Goto :1
:1
Start unit-tests.bat
Goto :2
:2
Start deploy.bat
Komentar (0)

Jika anda ingin membuka banyak batch file sekaligus anda dapat menggunakan perintah panggilan. Namun, panggilan perintah menutup bat file dan pergi ke yang lain. Jika anda ingin membuka banyak sekaligus, anda mungkin ingin mencoba ini:

@echo off
start cmd "call ex1.bat&ex2.bat&ex3.bat"

Dan sebagainya atau ulangi mulai cmd "panggilan..." namun untuk banyak file. Ini bekerja untuk Windows 7, tapi saya tidak yakin tentang sistem lain.

Komentar (0)

Menjalankan beberapa script di satu saya memiliki masalah yang sama. Aku terus setelah itu mati pada yang pertama tidak menyadari bahwa itu adalah keluar pada script pertama.

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

:: ScriptA.bat
Do Foo
EXIT
::ScriptB.bat
Do bar
EXIT

Saya dihapus semua 11 dari script saya KELUAR jalur dan mencoba lagi dan semua 11 berlari di urutan satu pada waktu yang sama dalam jendela perintah.

:: OneScriptToRunThemAll.bat
CALL ScriptA.bat
CALL ScriptB.bat
EXIT

::ScriptA.bat
Do Foo

::ScriptB.bat
Do bar
Komentar (2)

Hanya menggunakan panggilan perintah! Berikut ini sebuah contoh:

call msbuild.bat
call unit-tests.bat
call deploy.bat
Komentar (0)

Dengan benar mengutip (hal ini dapat sulit kadang-kadang):

start "" /D "C:\Program Files\ProgramToLaunch" "cmd.exe" "/c call ""C:\Program Files\ProgramToLaunch\programname.bat"""

1 arg - Judul kosong (dalam kasus ini)
2 arg - /D menentukan awal direktori, dapat diabaikan jika ingin bekerja saat ini dir (seperti "%~dp0")
Arg 3 - perintah untuk memulai, "cmd.exe"
4 argumen - argumen untuk perintah, dengan dua kali lipat kutipan argumen di dalamnya (ini adalah bagaimana anda melarikan diri kutipan dalam kutipan di batch)

Komentar (0)

Berikut ini adalah Cara Saya =

cmd /c ""Path_Bat_Here.bat" %ARG%"
:: Or =
Call *.bat

Membantu = cmd /?

Komentar (0)

Berikut memecahkan masalah saya:

start call "batch1.bat"
start call "batch2.bat"
Komentar (0)