2009-07-11 8 views
50

मेरे पास एक पोस्ट-बिल्ड इवेंट है जो सी # प्रोजेक्ट के लिए कुछ कमांड चलाता है। आखिरी कमांड कभी-कभी ERRORLEVEL मान शून्य के बराबर नहीं होता है और फिर बिल्ड विफल हो जाता है।ERRORLEVEL को शून्य पर रीसेट करने का सबसे आसान तरीका क्या है?

मैं हमेशा ERRORLEVEL मान को शून्य पर सेट करने के लिए कमांड की एक अतिरिक्त पंक्ति जोड़ना चाहता हूं। ऐसा करने का सबसे सुविधाजनक तरीका क्या है?

+0

पर QueryDirectory कॉल से पता चलता है, केवल आईडीई यह कैसा दिखाई देता है। – Dykam

+8

मुझे एहसास है कि यह एक बहुत पुरानी पोस्ट है ... आखिरी कमांड के बाद "टाइप नूल" कमांड जारी करके मुझे एररलेवल को रीसेट करने में सफलता मिली। बस महसूस किया कि यह उपयोग का हो सकता है। – Arun

उत्तर

15

मुझे पता चला कि "बाहर निकलें 0" इस समस्या से निपटने के लिए एक अच्छा तरीका दिखता है।

प्रयोग उदाहरण:

नेट रोकें UnderDevService/वाई

बाहर निकलने 0

अगर UnderDevService सेवा प्रारंभ नहीं किया गया है।

+4

यदि आप कमांड लाइन से उस बैच फ़ाइल को भी चलाने के लिए नहीं चाहते हैं, क्योंकि बाहर निकलने वाला 0 विंडो बंद कर देगा। नीचे सुझाए गए अनुसार cmd/c "exit/b 0" बहुत अधिक बिनिंग – madoki

42

चाल करने के लिए लगता है:

ver > nul 

नहीं सब कुछ काम करता है, और यह स्पष्ट क्यों नहीं है। उदाहरण के लिए, निम्नलिखित नहीं:

echo. > nul 
cls > nul 
+9

मुझे लगता है कि क्यों "echo" और "cls" काम नहीं करते हैं क्योंकि वे शैल अंतर्निहित कमांड हैं, असली प्रोग्राम नहीं। – user95319

+1

मैं आपको वह दूंगा, लेकिन ver.exe कहां है? –

+0

मुझे "ver.exe" या "ver.com" नहीं मिल रहा है। मुझे नहीं पता कि उसे कैसे समझाया जाए। – user95319

56

यदि आप exit /b 0 का उपयोग करते हैं तो आप माता-पिता से बाहर निकले बिना बच्चे बैच स्क्रिप्ट के भीतर errorlevel 0 वापस कर सकते हैं।

+4

सभी प्रस्तावित समाधानों में से, यह शायद सबसे अच्छा है। मैं इस लाइन को * resetErrorlevel.bat * स्क्रिप्ट में टॉस करने जा रहा हूं। सब कुछ, तथ्य यह है कि किसी को स्क्रिप्ट के त्रुटि स्तर को समाशोधन के रूप में कुछ करने के लिए इस तरह की लंबाई में जाना है, यह अभी भी अधिक प्रमाण है कि विंडोज बैच प्रोग्रामिंग के आविष्कारक को शिकार किया जाना चाहिए और कठोर रूप से दंडित किया जाना चाहिए। ;) – antred

23

प्री-या पोस्ट-बिल्ड इवेंट में, यदि निष्पादन योग्य का रिटर्न कोड शून्य से अधिक है, और निष्पादन योग्य को कॉल प्री-या पोस्ट-बिल्ड इवेंट की अंतिम पंक्ति नहीं है, तो एक त्वरित तरीका

cmd /c "exit /b 0" 

यह अनिवार्य रूप से पहले से उल्लेख किया समाधान है कि के साथ काम करेंगे की एक सामान्य संयोजन है: यह मूक और एक गैर शून्य errorlevel का एक चेक को ट्रिगर से बचने के लिए एक लाइन कि स्पष्ट रूप से शून्य रिटर्न के साथ ऐसा न करने पर लाइन का पालन करने के लिए है से अधिक प्री-या पोस्ट-बिल्ड ईवेंट की अंतिम पंक्ति।

+0

धन्यवाद, यह मेरे लिए काम किया। उपरोक्त 'निकास 0' का आसान ध्वनि सुझाव इसे काट नहीं देता है क्योंकि मैं त्रुटि को रीसेट करने के बाद सामान करना जारी रखना चाहता हूं, – madoki

+3

से बाहर निकलने के लिए और भी अधिक फैंसी: आप '<कुछ विफल कमांड> || एक लाइनर के रूप में cmd ​​/ c "निकास/बी 0" '। – Kupiakos

+0

मुझे *** सेटिंग *** के लिए यह विधि पसंद है *** एक मनमानी त्रुटिवृत्त जैसे: 'cmd/c "exit/b 9009" ', लेकिन यह 0 को सेट करने के लिए थोड़ा अधिक लगता है।' Ver> nul' (एक आंतरिक कमांड), 'cmd/c "निकास/बी 0" 'के साथ कमांड खोल की दूसरी प्रति लोड करने से कम ओवरहेड के साथ ही काम करता है? –

0

प्रत्येक आदेश के बाद >nul जोड़ें विफल होने की संभावना है - ऐसा लगता है कि निर्माण विफल होने से रोकता है।

आप अभी भी %errorlevel% की जांच करके कमांड का परिणाम देख सकते हैं।

उदाहरण के लिए:

findstr "foo" c:\temp.txt>nul & if %errorlevel% EQU 0 (echo found it) else (echo didn't find it) 
+1

यह काम नहीं करेगा - खोल एक बार में पूरी कमांड लाइन का मूल्यांकन करता है, इसलिए "findstr" कमांड निष्पादित होने से पहले% errorlevel% को प्रतिस्थापित किया जाएगा। गैर-त्रुटि त्रुटि के लिए परीक्षण करने के बजाय "अगर त्रुटि 1" का प्रयोग करें। – UweBaemayr

+1

शायद आपका सीआई सर्वर विफल रहता है अगर उदाहरण के लिए मानक आउटपुट/मानक त्रुटि में स्ट्रिंग "त्रुटि" पाता है। आप स्थिति को रीसेट नहीं कर रहे हैं। आप बस आदेश को शांत कर रहे हैं। गहरी चुप्पी के उपयोग के लिए> nul 2> nul –

5

मैं VERIFY का उपयोग करें या VERIFY > nul

-3

मैं हमेशा सिर्फ इस्तेमाल किया;

set ERRORLEVEL=0 

मैं इसे गधे के वर्षों के लिए उपयोग कर रहा हूं।

+22

यह आसान है लेकिन यह वास्तव में एक बुरा विचार है, क्योंकि यह 'त्रुटिलेवल' नामक एक चर बनाता है जो आंतरिक छद्म चर 'errorlevel' – jeb

+4

क्रिकर ओवरले करता है, आप सही हैं! वाह, ऐसा लगता है कि मैं वर्षों से गोलियां चकमा रहा हूं :) – cirrus

+1

यहां साइरस! धन्यवाद जेब! – PsychoData

0

मैं इस का उपयोग कर रहा:

पिंग स्थानीय होस्ट -n 1> अशक्त

+2

नींद कमांड के रूप में भी लोकप्रिय, जब n> 1। –

1

तो इस तरह "पोस्ट-निर्माण घटना" एक टुकड़ा है आदि, तो आप ठीक से जुड़ाव करेंगे:

(...) || ver > nul 

अंतिम आदेश के अंत में।

वैकल्पिक रूप से

cmd /c "exit /b 0" 

बहुत साफ है और गैर मुहावरेदार है - एक पाठक कौन जानता है विंडोज शेल पता चल जाएगा क्या हो रहा है, और क्या अपने इरादतन किया है।

हालांकि, यदि आप बैच स्क्रिप्ट में हैं, तो आप एआरएफ के उत्तर से "बाल बैच स्क्रिप्ट" के हल्के समकक्ष subrotines का उपयोग करना चाह सकते हैं।

:reset_error 
exit /b 0 

और फिर बस

call :reset_error 

आपको उपलब्ध हो जाए:

एक सबरूटीन है। EOF पर्याप्त नहीं है: -:

@echo off 
rem *** main *** 

call :raise_error 
echo After :raise_error ERRORLEVEL = %ERRORLEVEL% 

call :empty 
echo After :empty ERRORLEVEL = %ERRORLEVEL% 

call :reset_error 
echo After :reset_error ERRORLEVEL = %ERRORLEVEL% 

:: this is needed at the end of the main body of the script 
goto:eof 

rem *** subroutines *** 

:empty 
goto:eof 

:raise_error 
exit /b 1 

:reset_error 
exit /b 0 

कौन सा आउटपुट: बस बुला और गोटो के माध्यम से लौटने

After :raise_error ERRORLEVEL = 1 
After :empty ERRORLEVEL = 1 
After :reset_error ERRORLEVEL = 0 

जैसा कि आप देख

यहां एक संपूर्ण उदाहरण है।

1

मैं व्यक्तिगत रूप से इस का उपयोग करें:

cd .

भी यूनिक्स खोल में काम करता है।

लेकिन, यह एक थोड़ा तेजी से हो सकता है:

type nul>nul

क्योंकि Process Monitor निर्माण वास्तव में विफल नहीं cd .

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