Làm thế nào để kiểm tra mã thoát của lệnh cuối cùng trong tệp bó?


Câu trả lời:


78

Kiểm tra mã trả về lớn hơn hoặc bằng 1:

if ERRORLEVEL 1 echo Error

hoặc là

if %ERRORLEVEL% GEQ 1 echo Error

hoặc kiểm tra mã trả về bằng 0:

if %ERRORLEVEL% EQU 0 echo OK

Bạn có thể sử dụng các lệnh khác như GOTOnơi tôi hiển thị echo.


Tôi đã thử mã của bạn. Tôi đã nhận được lỗi sau:0 was unexpected this time.
Misha Moroshko

2
@Misha: Bạn có thể đã thử nó với các dấu hiệu phần trăm theo cách tôi đã đăng ban đầu. Hãy thử mà không có chúng hoặc thử các phiên bản khác tôi đã thêm.
Dennis Williamson

2
Tìm thấy trường hợp bằng %ERRORLEVEL%0 mặc dù đã xảy ra lỗi. Đã xảy ra khi kiểm tra %ERRORLEVEL%trong một tập tin cmd. Cố gắng start /waitkhông làm việc. Điều duy nhất hiệu quả làif errorlevel 1 (...)
AlikElzin-kilaka

4
Hãy lưu ý, errorlevel không phải là một biến môi trường . Đây là một bản tóm tắt tốt về những cạm bẫy và sự tinh tế .
Nick Westgate

Tôi có thể đề nghị sử dụng NEQthay vì EQUđể hỗ trợ phát hiện mã trả lại âm không? Không biết Windows XP có làm được điều đó không, nhưng đó là một điều trên Windows hiện đại
binki

10

Điều này thực sự hoạt động khi bạn có: App1.exe gọi -> .bat chạy -> app2.exe

App2 trả về errorlevel 1 ... nhưng bạn cần phải bắt nó trong .bat và nâng nó lên app1 ... nếu không .bat ăn errorlevel và app1 không bao giờ biết.

Phương pháp:

Trong .bat:

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

Đây là một kiểm tra sau khi app2 tìm lỗi. Nếu> 0, thì .bat thoát và đặt errorlevel thành 1 cho ứng dụng gọi1.


4
nó thậm chí còn tốt hơn nếu bạn trả lại lỗi tương tự cho app1. tôi đã không thử điều này, nhưng nó sẽ hoạt động : if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Viktor Fonic

2
Ít nhất là trong Windows,% ERRORLEVEL% có thể là một số âm (ví dụ: tôi có một chương trình trả về -1 khi có lỗi). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%có thể là một lựa chọn tốt hơn Nhưng bạn thực sự cần phải biết những gì chương trình trả về lỗi. Một số chương trình trả về một số mã khác không cho các loại thành công đặc biệt.
Euro Micelli

Nếu app2 là thứ cuối cùng bạn chạy trong tệp bat, mã lỗi sẽ lan truyền.
AnrDaemon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.