मैं Windows कमांड लाइन से एप्लिकेशन निकास कोड कैसे प्राप्त करूं?




command-line process (4)

मैं एक प्रोग्राम चला रहा हूं और देखना चाहता हूं कि इसका रिटर्न कोड क्या है (क्योंकि यह अलग-अलग त्रुटियों के आधार पर अलग-अलग कोड देता है)।

मैं बैश में जानता हूं मैं इसे चलाकर कर सकता हूं

$ echo?

विंडोज़ पर cmd.exe का उपयोग करते समय मैं क्या करूँ?



एक बिंदु पर मुझे सिग्विन से विंडोज इवेंट लॉग में लॉग इवेंट को सटीक रूप से पुश करने की आवश्यकता थी। मैं चाहता था कि वेवएल में संदेश कस्टम हों, सही निकास कोड, विवरण, प्राथमिकताएं, संदेश इत्यादि। इसलिए मैंने इसकी देखभाल करने के लिए एक छोटी बैश स्क्रिप्ट बनाई। यहां यह logit.sh पर है, logit.sh

कुछ अंश:

usage: logit.sh [-h] [-p] [-i=n] [-s] <description>
example: logit.sh -p error -i 501 -s myscript.sh "failed to run the mount command"

यहां अस्थायी फ़ाइल सामग्री भाग है:

LGT_TEMP_FILE="$(mktemp --suffix .cmd)"
cat<<EOF>$LGT_TEMP_FILE
    @echo off
    set LGT_EXITCODE="$LGT_ID"
    exit /b %LGT_ID%
EOF
unix2dos "$LGT_TEMP_FILE"

WEVL में ईवेंट बनाने के लिए यहां एक फ़ंक्शन है:

__create_event () {
    local cmd="eventcreate /ID $LGT_ID /L Application /SO $LGT_SOURCE /T $LGT_PRIORITY /D "
    if [[ "$1" == *';'* ]]; then
        local IFS=';'
        for i in "$1"; do
            $cmd "$i" &>/dev/null
        done
    else
        $cmd "$LGT_DESC" &>/dev/null
    fi
}

बैच स्क्रिप्ट को निष्पादित करना और __create_event पर कॉल करना:

cmd /c "$(cygpath -wa "$LGT_TEMP_FILE")"
__create_event

परीक्षण ErrorLevel कंसोल अनुप्रयोगों के लिए काम करता है, लेकिन dmihailescu द्वारा संकेत के रूप में, यदि आप कमांड प्रॉम्प्ट से विंडो किए गए एप्लिकेशन (जैसे Win32- आधारित) को चलाने का प्रयास कर रहे हैं तो यह काम नहीं करेगा। एक खिड़की वाला अनुप्रयोग पृष्ठभूमि में चलाया जाएगा, और नियंत्रण तुरंत कमांड प्रॉम्प्ट पर वापस आ जाएगा ( ErrorLevel यह इंगित करने के लिए कि ErrorLevel सफलतापूर्वक बनाई गई थी) शून्य की ErrorLevel के साथ संभवतः। जब एक खिड़की वाला अनुप्रयोग अंततः बाहर निकलता है, तो इसकी निकास स्थिति खो जाती है।

कंसोल-आधारित सी ++ लॉन्चर का उपयोग कहीं और उल्लिखित करने के बजाय, कमांड प्रॉम्प्ट के START /WAIT कमांड का उपयोग करके विंडो किए गए एप्लिकेशन को शुरू करने का एक आसान विकल्प है। यह विंडो किए गए एप्लिकेशन को शुरू करेगा, इसके बाहर निकलने के लिए प्रतीक्षा करें, और उसके बाद ErrorLevel में सेट की गई प्रक्रिया की निकास स्थिति के साथ कमांड प्रॉम्प्ट पर नियंत्रण ErrorLevel

start /wait something.exe
echo %errorlevel%

यदि आप वास्तव में त्रुटि कोड से मेल खाना चाहते हैं (उदाहरण 0 के बराबर), इसका उपयोग करें:

@echo off
my_nify_exe.exe
if %ERRORLEVEL% EQU 0 (
   echo Success
) else (
   echo Failure Reason Given is %errorlevel%
   exit /b %errorlevel%
)

"अगर एररलेवल 0" त्रुटि त्रुटि से मेल खाता है> = 0. "अगर /?" देखें।





exit-code