2012-12-13 24 views
8

स्क्रिप्ट की शुरुआत में "सेट-ए" में बैश निर्देश देता है कि किसी भी कमांड की पहली विफलता पर पूरी स्क्रिप्ट को विफल करने के लिए बैश निर्देशित करें।क्या एक डॉस बैच स्क्रिप्ट के लिए "सेट-ए" है?

मैं विंडोज बैच स्क्रिप्ट के लिए ऐसा कैसे करूं?

उत्तर

5

सीधे नहीं, लेकिन आप प्रत्येक पंक्ति में निम्नलिखित को जोड़ सकते हैं जिसमें निष्पादित करने के लिए कुछ है।

|| goto :error 

और फिर त्रुटि को परिभाषित करें, जो स्क्रिप्ट को रोकता है।

:error 
exit /b %errorlevel% 
+0

बैश में उतना अच्छा नहीं है, लेकिन काफी अच्छा है। – mark

+1

+1, लेकिन एक आसान समाधान भी है। [मेरा जवाब] देखें (http://stackoverflow.com/a/13863374/1012053)। – dbenham

13

तुइम का समाधान काम करता है, लेकिन इसे और भी सरल बनाया जा सकता है।

ERRORLEVEL पहले ही सेट हो चुका है, इसलिए ERRORLEVEL सेट करने वाले लेबल को प्राप्त करने की आवश्यकता नहीं है।

आप बस का उपयोग कर सकते

yourCommand || exit /b 

ध्यान दें कि बाहर निकलने/b केवल वर्तमान सबरूटीन बाहर निकल जाएगा अगर आप एक कॉल के बीच में हैं। स्क्रिप्ट की जड़ तक पहुंचने तक आपकी स्क्रिप्ट को प्रत्येक कॉल, परत से परत से बाहर निकलना होगा। यही कारण है कि जब तक अपने आप ही हो जैसा कि आप भी एक कॉल बयान

call :label || exit /b 

यह किसी भी कॉल गहराई से तुरंत बाहर निकलने के लिए एक बैच स्क्रिप्ट के लिए मजबूर करने के लिए संभव है के बाद परीक्षण डाल देंगे। अधिक जानकारी के लिए How can I exit a batch file from within a function? देखें। दोनों उत्तरों को पढ़ना सुनिश्चित करें। स्वीकार्य उत्तर में संभावित रूप से गंभीर कमीएं हैं।

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