bagaimana saya bisa membuat file .bat saya berlanjut setelah kesalahan


30

Saya memiliki file .bat di windows yang melakukan tiga hal

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

Kadang-kadang cmd1 bisa gagal dan tidak apa-apa, saya ingin melanjutkan dan menjalankan cmd2 dan cmd3. Tapi kelelawar saya berhenti di cmd1. Bagaimana saya bisa menghindari ini?

Perbarui untuk kejelasan - ini bukan file .bat lainnya, itu adalah perintah exe. Mudah-mudahan saya tidak perlu membangun pohon file .bat hanya untuk mencapai ini.


Anda harus dapat memulai perintah menggunakan cmd /C.
Der Hochstapler

1
Anda perlu menunjukkan contoh kode spesifik tentang apa yang tidak berfungsi. File batch biasanya tidak berakhir secara otomatis jika perintah gagal karena kesalahan. File batch akan diakhiri jika ada kesalahan sintaksis. Jika kode Anda keluar karena kesalahan exe, maka harus ada logika dalam kode Anda yang menyebabkan perilaku itu.
dbenham

Jawaban:


18

Pilihan lain adalah menggunakan amperstand ( &)

cmd1 & cmd2 & cmd3

Jika Anda menggunakan ganda, itu hanya akan berjalan jika perintah sebelumnya selesai dengan sukses ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Jika Anda menggunakan pipa ganda ( ||), itu hanya menjalankan perintah berikutnya jika sebelumnya dilengkapi dengan kode kesalahan ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3


Bisakah saya melakukan ini ketika melewati argumen juga? Saya hanya mencoba dan tidak berhasil.
ConfusedNoob

@ ConfusedNoob Saya lakukan sepanjang waktu ... Saya punya CHKDSKperintah, dengan argumen, yang berfungsi. Saya mengetik check D: & check E: & check F:, dan itu berhasil. Argumen yang dimiliki file BAT termasuk /perf /f /r /b /scansakelar
Luke Kanada. INSTALASI MONICA

2
bagus membawakan saya ide untuk mengimplementasikan beberapa percobaan ulang: cmd || cmd || ... akan menjalankan cmd berikutnya hingga berhasil
iTake

1
Ini membuat skrip panjang tidak dapat dibaca, apakah tidak ada cara lain?
Januari

1
@CanadianLuke Well batch adalah kerangka batch windows. Bagaimana Anda menjalankan ratusan perintah secara tidak interaktif? Apakah ada pendekatan yang lebih baik di shell daya? Apakah lebih buruk pindah ke sana?
Januari

11

Menganggap cmds adalah file .bat lainnya yang menumpuk perintah seperti ini:

 call cmd1
 call cmd2
 call cmd3

10

Ini bekerja untuk saya:

cmd.exe /c cmd1 arg1
cmd2
...

Ini digunakan cmd.exeuntuk mengeksekusi perintah dalam instance baru dari interpreter perintah Windows, jadi perintah yang gagal tidak mengganggu skrip batch. The /cbendera memberitahu juru bahasa untuk mengakhiri segera setelah selesai perintah mengeksekusi.

cmd2mengeksekusi bahkan jika perintah pertama gagal. Lihat cmd /?dari Windows Command Prompt untuk informasi lebih lanjut.

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.