Menjalankan banyak perintah dari skrip cmd Windows


137

Saya mencoba menulis skrip cmd Windows untuk melakukan beberapa tugas secara seri. Namun, itu selalu berhenti setelah perintah pertama dalam skrip.

Perintah yang dihentikan setelahnya adalah maven build (tidak yakin apakah itu relevan).

Bagaimana cara membuatnya menjalankan dan menjalankan setiap tugas secara bergiliran?

Menginstal perangkat lunak apa pun atau mengkonfigurasi registri dll sama sekali tidak mungkin - ia harus bekerja pada instalasi Windows XP vanilla.

Idealnya saya ingin skrip dibatalkan jika ada perintah yang gagal, tapi itu "bagus untuk dimiliki", tidak penting.

Terima kasih.

Jawaban:


139

Saat Anda memanggil file .bat lain, saya rasa Anda perlu "menelepon" di depan panggilan:

call otherCommand.bat

1
Hai, dalam skrip asli saya tidak memanggil file .cmd lainnya, tetapi saya telah membaginya menjadi file terpisah sehingga saya dapat menjalankannya secara bergantian. Jadi, melakukan panggilan di depan setiap perintah tampaknya berhasil, terima kasih!
Darren Greaves

5
Faktanya, pada Windows, mvnadalah file .bat dengan sendirinya, jadi Anda perlu menggunakannya callseperti di call mvn install; biasanya Anda tidak perlu membuat file cmd tambahan.
jfpoilpret

2
Perhatikan bahwa Anda tidak memerlukan titik koma dalam file batch. Dan alasan mengapa Anda perlu menggunakan panggilan adalah karena mvn itu sendiri adalah file batch dan file batch perlu memanggil satu sama lain dengan panggilan, jika tidak kontrol tidak akan kembali ke pemanggil.
Pushkar

@Gulzar Nazim - Apakah Anda tahu jika saya dapat meletakkan semua perintah dalam satu file batch dengan pernyataan if-else karena saya tidak ingin menyimpannya di file batch yang berbeda?
Ng2-Fun

1
Saya mencoba melakukan sesuatu yang serupa dengan npmpembaruan dan protractortes. Saya tidak berpikir jawaban ini berlaku untuk saya sampai saya menyadari npmdan protractormerupakan .cmdfile di Windows.
joshden

45

Anda dapat menggunakan simbol && di antara perintah untuk menjalankan perintah kedua hanya jika yang pertama berhasil. Info lebih lanjut di sini http://commandwindows.com/command1.htm


Terima kasih, saya akan mencobanya bersama dengan jawaban yang diterima di atas.
Darren Greaves

Apakah ini akan menghentikan eksekusi skrip kedua jika build maven gagal?
Varun Achar

Tautan tersebut rusak: "Server backend tidak merespons tepat waktu. Server aplikasi terlalu sibuk dan tidak dapat menangani permintaan tepat waktu."
kevinji

1
@TheM Windows membedakan antara aplikasi berbasis GUI dan berbasis perintah (ada tanda di dekat permulaan file EXE). Jika Anda memulai aplikasi berbasis GUI dari baris perintah, ia selalu tampak segera berakhir karena benar-benar terlepas dari baris perintah. Jika Anda memulai program berbasis perintah dari program GUI (seperti Explorer), baris perintah baru akan selalu ditampilkan. Sistem POSIX tidak membuat perbedaan seperti itu sehingga perilakunya lebih konsisten.
coderforlife

2
@TheM Untuk menyiasati ini, Anda dapat menggunakanstart /B /WAIT calc
coderforlife

25

Tidak yakin mengapa perintah pertama berhenti. Jika Anda bisa membuatnya paralel, Anda bisa mencoba sesuatu seperti

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat

7
Gunakan /Ksebagai ganti /Cjika Anda ingin shell tetap terbuka setelah perintah Anda dijalankan.
JellicleCat

Tidak perlu menggunakan cmd.exedan start, cukup start x.bat1lakukan.
pengguna66001

23

Saya baru saja melakukan tugas yang sama (ish) untuk membuat skrip batch untuk menjalankan skrip uji maven. Masalahnya adalah memanggil skrip maven dengan mvn clean install ... itu sendiri adalah skrip dan perlu dilakukan dengan panggilan mvn clean install.

Kode yang akan bekerja

rem run a maven clean install
cd C:\rbe-ui-test-suite 
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1

Perhatikan lebih baik penggunaan panggilan. Ini akan memungkinkan penggunaan skrip maven berturut-turut dalam file batch.


5

Menggunakan ampersand ganda akan menjalankan perintah kedua, hanya jika yang pertama berhasil:

cd Desktop/project-directory && atom .

Sedangkan, dengan hanya menggunakan satu ampersand akan mencoba menjalankan kedua perintah, meskipun yang pertama gagal:

cd Desktop/project-directory & atom .

1

Jika Anda menjalankan di Windows, Anda dapat menggunakan perintah berikut.

Mendorong:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit

1

Saya tidak tahu jawaban langsung untuk pertanyaan Anda, tetapi jika Anda melakukan banyak skrip ini, mungkin ada baiknya mempelajari bahasa yang lebih kuat seperti perl. Implementasi gratis tersedia untuk Windows (mis. Activestate, cygwin). Saya merasa bahwa upaya awal untuk tugas-tugas saya sepadan dengan usaha saya.

Edit:

Seperti yang disarankan oleh @Ferruccio, jika Anda tidak dapat menginstal perangkat lunak tambahan, pertimbangkan vbscript dan / atau javascript. Mereka dibangun ke dalam host skrip Windows.


Terima kasih, tetapi saya tidak dapat menginstal perangkat lunak apa pun. Saya berharap saya memiliki akses ke sesuatu yang lebih kuat daripada bahasa skrip Windows yang jelek. :-(
Darren Greaves

6
Anda selalu dapat menggunakan vbscript atau javascript. Mereka dibangun ke dalam host skrip Windows.
Ferruccio

0

Perhatikan bahwa Anda tidak memerlukan titik koma dalam file batch. Dan alasan mengapa Anda perlu menggunakan panggilan adalah karena mvn itu sendiri adalah file batch dan file batch perlu memanggil satu sama lain dengan panggilan, jika tidak kontrol tidak akan kembali ke pemanggil.

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.