Bagaimana cara memeriksa kode keluar dari perintah terakhir dalam file batch?

Jawaban:

78

Tes untuk kode pengembalian lebih besar dari atau sama dengan 1:

if ERRORLEVEL 1 echo Error

atau

if %ERRORLEVEL% GEQ 1 echo Error

atau uji untuk kode pengembalian sama dengan 0:

if %ERRORLEVEL% EQU 0 echo OK

Anda bisa menggunakan perintah lain seperti GOTOtempat saya tunjukkan echo.

Dennis Williamson
sumber
Saya mencoba kode Anda. Saya mendapat kesalahan berikut:0 was unexpected this time.
Misha Moroshko
2
@Misha: Anda mungkin sudah mencobanya dengan tanda persen seperti cara saya mempostingnya. Cobalah tanpa mereka atau coba versi lain yang saya tambahkan.
Dennis Williamson
2
Ditemukan kasus di mana %ERRORLEVEL%0 meskipun terjadi kesalahan. Terjadi ketika memeriksa %ERRORLEVEL%dalam file cmd. Berusaha start /waittidak berhasil. Satu-satunya hal yang berhasil adalahif errorlevel 1 (...)
AlikElzin-kilaka
4
Sadarilah, tingkat kesalahan bukan variabel lingkungan . Berikut ini adalah ringkasan yang bagus dari perangkap dan kehalusannya .
Nick Westgate
Bisakah saya menyarankan menggunakan NEQdaripada EQUmendukung mendeteksi kode pengembalian negatif? Tidak tahu apakah Windows XP melakukan itu, tetapi itu adalah hal pada Windows modern ...
binki
10

Ini benar-benar berfungsi ketika Anda memiliki: Panggilan App1.exe -> .bat yang berjalan -> app2.exe

App2 mengembalikan errorlevel 1 ... tetapi Anda harus menangkapnya di .bat dan menaikkannya kembali ke app1 ... jika tidak .bat memakan errorlevel dan app1 tidak pernah tahu.

Metode:

Di .bat:

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

Ini adalah pemeriksaan setelah app2 untuk tingkat kesalahan. Jika> 0, maka .bat keluar dan setel tingkat kesalahan ke 1 untuk aplikasi panggilan1.

Sam Jones
sumber
4
bisa lebih baik lagi jika Anda mengembalikan kesalahan yang sama kembali ke app1. saya tidak mencoba hal ini, tetapi harus bekerja: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Viktor Fonic
2
Paling tidak di Windows,% ERRORLEVEL% dapat berupa angka negatif (misalnya saya memiliki program yang mengembalikan -1 pada kesalahan). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%mungkin opsi yang lebih baik. Tetapi Anda benar-benar perlu tahu program apa yang mengembalikan kesalahan. Beberapa program mengembalikan kode non-nol tertentu untuk jenis kesuksesan khusus.
Euro Micelli
Jika app2 adalah hal terakhir yang Anda jalankan di file bat, kode kesalahan akan menyebar.
AnrDaemon