Saya mencoba membuat saya commit-build.bat
untuk mengeksekusi file .BAT lainnya sebagai bagian dari proses build kami.
Isi dari commit-build.bat
:
"msbuild.bat"
"unit-tests.bat"
"deploy.bat"
Ini tampaknya cukup sederhana, tetapi commit-build.bat
hanya mengeksekusi item pertama dalam daftar ( msbuild.bat
).
Saya telah menjalankan masing-masing file secara terpisah tanpa masalah.
batch-file
cmd
Yvette
sumber
sumber
Jawaban:
Menggunakan:
Ketika tidak menggunakan CALL, file batch saat ini berhenti dan file batch yang disebut mulai dijalankan. Ini adalah perilaku aneh sejak masa MS-DOS.
sumber
Semua jawaban lain benar: gunakan panggilan. Sebagai contoh:
Sejarah
Dalam versi DOS kuno itu tidak mungkin untuk mengeksekusi file batch secara rekursif. Kemudian perintah panggilan diperkenalkan yang memanggil shell cmd lain untuk mengeksekusi file batch dan mengembalikan eksekusi ke shell cmd panggilan ketika selesai.
Jelas dalam versi yang lebih baru tidak ada lagi cmd shell yang diperlukan.
Pada hari-hari awal banyak file batch tergantung pada kenyataan bahwa memanggil file batch tidak akan kembali ke file batch panggilan. Mengubah perilaku itu tanpa sintaks tambahan akan merusak banyak sistem seperti sistem menu batch (menggunakan file batch untuk struktur menu).
Seperti dalam banyak kasus dengan Microsoft, kompatibilitas ke belakang adalah alasan untuk perilaku ini.
Kiat
Jika file batch Anda memiliki spasi dalam namanya, gunakan tanda kutip di sekitar nama:
Omong-omong: jika Anda tidak memiliki semua nama file batch, Anda juga dapat menggunakan untuk melakukan ini (itu tidak menjamin urutan panggilan file batch yang benar; itu mengikuti urutan sistem file):
Anda juga dapat bereaksi pada tingkat kesalahan setelah panggilan. Menggunakan:
untuk mengembalikan tingkat kesalahan. 0 menunjukkan eksekusi yang benar. Dalam file batch panggilan Anda dapat bereaksi menggunakan
Gunakan
if errorlevel 1
jika Anda memiliki Windows yang lebih tua dari NT4 / 2000 / XP untuk menangkap semua tingkat kesalahan 1 dan lebih besar.Untuk mengontrol aliran file batch, ada goto :-(
Seperti yang ditunjukkan orang lain: lihat membangun sistem untuk mengganti file batch.
sumber
errorlevel
contoh perintah memberi saya masalah pada Windows 10 (di konsol cmd). Saya memodifikasi perintah menjadi sederhanaif errorlevel neq echo Houston We have a Problem!
. Proses batch saya tidak memiliki masalah dan sebagian besar diselesaikan secara normal, tetapi setiap langkah di mana saya menggunakan perintah ini setelah pernyataan panggilan, saya mendapat "neq tidak terduga saat ini". Berpikir mereka mungkin telah mengubah sintaks tidak-sama, saya mencoba!=
dan juga<>
tetapi terus mendapatkan kesalahan "tidak diharapkan saat ini" yang sama untuk sintaks baru. apa yang bisa saya lakukan salah?Jika kita ingin membuka beberapa perintah, maka kita bisa menggunakannya
/k
: adalah wajib yang akan dieksekusi.Meluncurkan banyak perintah dapat dilakukan seperti di bawah ini.
sumber
start "Window title" /wait cmd /k call something.bat
untuk menjalankan sesuatu dalam urutan berurutan.start "Window title" /wait cmd /c something.bat
, di manacmd /c
menutup jendela setelah selesai)Mencoba:
sumber
Anda memanggil banyak batch dalam upaya mengkompilasi program. Saya menerima begitu saja bahwa jika terjadi kesalahan:
1) Program dalam batch akan keluar dengan tingkat kesalahan;
2) Anda ingin tahu tentang itu.
'||' menguji tingkat kesalahan lebih tinggi dari 0. Dengan cara ini semua batch dipanggil secara berurutan tetapi akan berhenti pada kesalahan apa pun, meninggalkan layar sebagaimana adanya bagi Anda untuk melihat pesan kesalahan apa pun.
sumber
Jika kita memiliki dua skrip batch, aaa.bat dan bbb.bat, dan panggil seperti di bawah ini
Saat menjalankan skrip, ia akan memanggil aaa.bat terlebih dahulu, tunggu utas aaa.bat berakhir, dan panggil bbb.bat.
Tetapi jika Anda tidak ingin menunggu aaa.bat untuk mengakhiri panggilan bbb.bat, coba gunakan perintah MULAI :
Ujian:
sumber
sumber
Untuk memanggil
.bat
file di dalam.bat
file, gunakan(Ya, ini konyol, akan lebih masuk akal jika Anda bisa memanggilnya
foo.bat
, seperti yang Anda bisa dari command prompt, tetapi cara yang benar adalah dengan menggunakannyacall
.)sumber
Melihat nama file Anda, sudahkah Anda mempertimbangkan untuk menggunakan alat bangun seperti NAnt atau Ant (versi Java). Anda akan mendapatkan kontrol lebih banyak daripada dengan file bat.
sumber
Jika Anda ingin membuka banyak file sekaligus, Anda dapat menggunakan perintah panggilan. Namun, perintah panggilan menutup file bat saat ini dan pergi ke yang lain. Jika Anda ingin membuka banyak sekaligus, Anda mungkin ingin mencoba ini:
Dan seterusnya atau ulangi mulai
cmd
"call
..." untuk banyak file. Ini berfungsi untuk Windows 7 , tetapi saya tidak yakin dengan sistem lain.sumber
Jika itu tidak berhasil, ganti
start
dengancall
atau coba ini:sumber
Cukup gunakan
call
perintah! Berikut ini sebuah contoh:sumber
Dengan kutipan yang benar (kadang-kadang bisa rumit):
Arg 1 - Judul (kosong dalam kasus ini)
Arg 2 - - D menentukan direktori awal, dapat dihentikan jika ingin direktori kerja saat ini (seperti "% ~ dp0")
Arg 3 - perintah untuk diluncurkan, "cmd.exe"
4th arg - argumen untuk diperintahkan, dengan tanda kutip dua kali lipat untuk argumen di dalamnya (ini adalah bagaimana Anda menghindari tanda kutip dalam tanda kutip dalam batch)
sumber
Menjalankan banyak skrip dalam satu saya memiliki masalah yang sama. Saya terus membiarkannya mati pada yang pertama tidak menyadari bahwa itu keluar pada skrip pertama.
Saya menghapus semua 11 dari skrip EXIT saya dan mencoba lagi dan semua 11 berjalan secara berurutan di jendela perintah yang sama.
sumber
exit
s, gantilah dengangoto :eof
. Ini akan "kembali" kecall
@echo off :menu some commands goto menu
catatan ini akan menjalankan loop terus menerus sampai ditutup. pada dasarnya Anda tidak perlu::
hanya:
Berikut ini memecahkan masalah saya:
sumber
Mungkin Anda menginginkan ini:
Jalankan skrip batch secara paralel-
Di sini tiga file batch dijalankan pada jendela perintah terpisah dalam keadaan minimal. Jika Anda tidak ingin mereka diperkecil, maka hapus
/min
. Juga, jika Anda tidak perlu mengontrolnya nanti, maka Anda bisa menyingkirkan judulnya. Jadi, perintah tanpa tulang akan menjadi-start cmd /k call systemLogCollector.bat
Jika Anda ingin mengakhiri mereka-
sumber