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.

ConfusedNoob
sumber
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

Luke Kanada REINSTATE MONICA
sumber
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
mdpc
sumber
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.

Joseph238
sumber