बैच फ़ाइल में अंतिम कमांड के निकास कोड की जांच कैसे करें?


69

विंडोज पर एक बैच फ़ाइल के अंदर, मैं इस तरह 7-ज़िप का उपयोग करता हूं :

...\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

आप अन्य कमांड का उपयोग कर सकते हैं जैसे GOTOकि मैं जहां दिखाता हूं echo


मैंने आपके कोड की कोशिश की। मुझे निम्नलिखित त्रुटि मिली:0 was unexpected this time.
मिशा मोशको

2
@ मिशा: आपने प्रतिशत के साथ इसे आज़माया होगा, जिस तरह से मैंने इसे मूल रूप से पोस्ट किया था। उनके बिना इसे आज़माएँ या मेरे द्वारा जोड़े गए अन्य संस्करणों को आज़माएँ।
डेनिस विलियमसन

2
पाया मामलों जहां %ERRORLEVEL%0 है, भले ही एक त्रुटि हुई। %ERRORLEVEL%एक cmd फ़ाइल में जाँच करते समय हुआ । कोशिश करने से start /waitकाम नहीं चला। केवल एक चीज जो काम करती है वह हैif errorlevel 1 (...)
AlikElzin-kilaka

4
ज्ञात हो, एररवेले एक पर्यावरण चर नहीं है । यहाँ नुकसान और सूक्ष्मताओं का अच्छा सारांश है ।
निक वेस्टगेट

क्या मैं नकारात्मक रिटर्न कोड का पता लगाने के समर्थन के NEQबजाय उपयोग करने का सुझाव दे सकता हूं EQU? कोई विचार नहीं अगर Windows XP ऐसा करता है, लेकिन यह आधुनिक विंडोज पर एक बात है ...
binki

10

यह वास्तव में आपके पास काम करता है: App1.exe कॉल -> .bat जो चलता है -> app2.exe

App2 त्रुटि 1 को लौटाता है ... लेकिन आपको इसे पकड़ने की आवश्यकता है .bat और इसे फिर से app1 में बढ़ाएँ ... अन्यथा ।bat ने त्रुटि को खाया और app1 कभी नहीं जानता।

तरीका:

.Bat में:

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

यह त्रुटि के लिए app2 के बाद एक जाँच है। अगर> 0, तो .bat बाहर निकलता है और कॉलिंग ऐप 1 के लिए एररवेल को 1 पर सेट करता है।


4
यह और भी बेहतर हो सकता है यदि आप उसी त्रुटि को वापस app1 में लौटा दें। मैं इसे बाहर की कोशिश नहीं की, लेकिन यह काम करना चाहिए if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%:।
विक्टर फोनिक जूल

2
कम से कम विंडोज में,% ERRORLEVEL% एक ऋणात्मक संख्या हो सकती है (उदाहरण के लिए मेरे पास एक प्रोग्राम है जो त्रुटियों पर -1 लौटाता है)। IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%एक बेहतर विकल्प हो सकता है। लेकिन आपको वास्तव में यह जानने की जरूरत है कि प्रोग्राम त्रुटियों पर क्या लौटाता है। कुछ कार्यक्रम विशेष प्रकार की सफलता के लिए कुछ गैर-शून्य कोड लौटाते हैं।
यूरो माइकेल

यदि app2 बैट फाइल में आपके द्वारा चलायी जाने वाली आखिरी चीज है, तो एरर कोड प्रोपेगेट करेगा।
अराउंडमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.