วิธีตรวจสอบรหัสทางออกของคำสั่งสุดท้ายในแบตช์ไฟล์?


69

ภายในไฟล์แบทช์บน Windows ฉันใช้7-zipดังนี้:

...\right_path\7z a output_file_name.zip file_to_be_compressed

ฉันจะตรวจสอบรหัสออกจาก7zและดำเนินการที่เหมาะสมได้อย่างไร


คำตอบ:


78

ทดสอบโค้ดส่งคืนที่มากกว่าหรือเท่ากับ 1:

if ERRORLEVEL 1 echo Error

หรือ

if %ERRORLEVEL% GEQ 1 echo Error

หรือทดสอบโค้ดส่งคืนเท่ากับ 0:

if %ERRORLEVEL% EQU 0 echo OK

คุณสามารถใช้คำสั่งอื่น ๆ เช่นที่ผมแสดงGOTOecho


ฉันลองใช้รหัสของคุณแล้ว ฉันได้รับข้อผิดพลาดดังต่อไปนี้:0 was unexpected this time.
Misha Moroshko

2
@Misha: คุณอาจลองด้วยเครื่องหมายเปอร์เซ็นต์ตามที่ฉันโพสต์ไว้ ลองโดยที่ไม่มีพวกเขาหรือลองรุ่นอื่น ๆ ที่ฉันเพิ่ม
Dennis Williamson

2
พบกรณีที่%ERRORLEVEL%เป็น 0 แม้ว่าจะมีข้อผิดพลาดเกิดขึ้น เกิดขึ้นเมื่อตรวจสอบ%ERRORLEVEL%ในไฟล์ cmd ความพยายามstart /waitไม่ได้ผล สิ่งเดียวที่ทำงานเป็นif errorlevel 1 (...)
AlikElzin-kilaka

4
ระวัง errorlevel คือไม่ได้เป็นตัวแปรสภาพแวดล้อม นี่คือบทสรุปที่ดีของข้อผิดพลาดและรายละเอียดปลีกย่อย
Nick Westgate

ฉันอาจแนะนำให้ใช้NEQแทนที่จะEQUสนับสนุนการตรวจจับโค้ดส่งคืนเชิงลบหรือไม่ ไม่มีความคิดถ้า Windows XP ไม่ว่า แต่มันก็เป็นสิ่งที่ทันสมัยบน Windows ...
Binki

10

วิธีนี้ใช้งานได้จริงเมื่อคุณมี: เรียก App1.exe -> .bat ซึ่งทำงาน -> app2.exe

App2 ส่งกลับข้อผิดพลาดระดับ 1 ... แต่คุณต้องตรวจสอบว่าใน. bat และยกระดับเป็น app1 ... มิฉะนั้น. bat จะกิน errorlevel และ app1 ไม่เคยรู้

วิธี:

ใน. bat:

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

นี่คือการตรวจสอบหลังจาก app2 สำหรับข้อผิดพลาดระดับ หาก> 0 ดังนั้น. bat จะออกและตั้ง errorlevel เป็น 1 สำหรับการเรียกใช้ app1


4
มันจะดีกว่านี้ถ้าคุณส่งคืนข้อผิดพลาดกลับไปที่ app1 ฉันไม่ได้ลองนี้ออก if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%แต่มันควรจะทำงาน:
Viktor Fonic

2
อย่างน้อยใน Windows% ERRORLEVEL% อาจเป็นจำนวนลบ (เช่นฉันมีโปรแกรมที่ส่งคืน -1 เมื่อเกิดข้อผิดพลาด) IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%อาจเป็นตัวเลือกที่ดีกว่า แต่คุณต้องรู้จริงๆว่าโปรแกรมส่งคืนข้อผิดพลาดอย่างไร บางโปรแกรมส่งคืนรหัสที่ไม่เป็นศูนย์เพื่อความสำเร็จประเภทพิเศษ
Euro Micelli

หาก app2 เป็นสิ่งสุดท้ายที่คุณเรียกใช้ในไฟล์ bat รหัสข้อผิดพลาดจะเผยแพร่
AnrDaemon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.