2009-05-20 11 views
24

में जावा प्रोग्राम की निकास स्थिति कैसे प्राप्त करें लिनक्स में $? के अनुरूप, क्या विंडोज बैच फ़ाइल (.bat) में किसी प्रोग्राम की निकास स्थिति प्राप्त करने का कोई तरीका है?
उदाहरण के लिए कहें कि सफल निष्पादन पर प्रोग्राम System.exit(0) है, और System.exit(1) विफलता पर, मैं इन निकास मानों को .bat फ़ाइल में कैसे फंस सकता हूं?विंडोज बैच फ़ाइल

उत्तर

26

%ERRORLEVEL% का उपयोग करें। क्या आपको प्यार नहीं है कि बैच फाइलें स्पष्ट और संक्षिप्त कैसे हैं? :)

26

कुछ की तरह:

java Foo 
set exitcode=%ERRORLEVEL% 
echo %exitcode% 

यह इस बैच फ़ाइल का पूर्ण अगली पंक्ति बनाने के लिए महत्वपूर्ण है, त्रुटि स्तर ओवरराइट किया जा रहा :)

ध्यान दें कि से बचने के लिए अगर आप

का उपयोग
IF ERRORLEVEL number 

बैच फ़ाइलों के "सुविधा", इसका मतलब है "यदि त्रुटि स्तर से अधिक या number के बराबर है" - यह समानता पर आधारित नहीं है। मैं अब से पहले कि ने काट लिया गया है :)

+0

मैं इस जवाब के साथ एक मामूली समस्या थी ... AFAIK, आप सेट कमांड में स्पेस का उपयोग नहीं कर सकते हैं, इसलिए इसे exitcode =% ERRORLEVEL% सेट किया जाना चाहिए। वैसे भी, यह परिवर्तन मेरे लिए काम किया। –

+0

@ रिचर्डफॉसेट: संपादित, धन्यवाद। –

0

सामान्य बाहरी आदेश के संचालन के अधिकांश लौट ERRORLEVEL 0 और यह आम तौर पर (लेकिन नहीं निरपवाद रूप से) इंगित करता है कि कोई त्रुटि आई थी:

c:\> dir 
... 
c:\> echo %ERRORLEVEL% 
19

रेमंड चेन का एक अच्छा ब्लॉग पोस्ट है जिसका नाम ERRORLEVEL is not %ERRORLEVEL% है। बाहर की जाँच करने लायक

यह भी ध्यान देने योग्य है कि आरईएम कमांड जो ज्यादातर लोग टिप्पणी के रूप में सोचते हैं, वास्तव में नहीं हैं। आरईएम कमांड एक एनओपी कमांड है जो हमेशा सफल करता है। एक रेम के बाद, त्रुटि स्तर हमेशा होता है 0. तो

willalwaysfail.bat 
REM unless you insert a comment after it 
if errorlevel 1 goto fail 

असफल कभी नहीं होगा ...

1

ज्यादातर Bulgar के सवाल का जवाब देने के लिए, लेकिन अन्य उत्तर के पूरक:

% के लिए

काम करने के लिए ERRORLEVEL% आपको कमांड एक्सटेंशन विंडोज में सक्रिय होना आवश्यक है (यह डिफ़ॉल्ट है)।
एक सत्र के लिए:

cmd /E:on 

या स्थायी रूप से रजिस्ट्री

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions = 0x01 
अधिक जानकारी के लिए

में:

cmd /? 

[]]

संबंधित मुद्दे