मैं एक सबरूटीन के अंदर से एक बैच फ़ाइल से कैसे बाहर निकल सकता हूं?
यदि मैं EXIT कमांड का उपयोग करता हूं, तो मैं बस उस लाइन पर लौटता हूं जहां मैंने सबरूटीन कहा था, और निष्पादन जारी है।
यहाँ एक उदाहरण है:
@echo off
ECHO Quitting...
CALL :QUIT
ECHO Still here!
GOTO END
:QUIT
EXIT /B 1
:END
EXIT /B 0
आउटपुट:
Quitting...
Still here!
अपडेट करें:
यह एक उचित उत्तर नहीं है, लेकिन मैंने कुछ इस तरह किया:
@echo off
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
ECHO You shouldn't see this!
GOTO END
:SUBROUTINE_WITH_ERROR
ECHO Simulating failure...
EXIT /B 1
:HANDLE_FAIL
ECHO FAILURE!
EXIT /B 1
:END
ECHO NORMAL EXIT!
EXIT /B 0
का डबल-पाइप स्टेटमेंट:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
के लिए आशुलिपि है:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
मैं अभी भी यह जानना पसंद करूंगा कि क्या कॉलर को स्थिति को संभालने के बजाय उप-मार्ग से सीधे बाहर निकलने का एक तरीका है, लेकिन यह कम से कम काम पूरा करता है।
# 2 अद्यतन करें: जब एक उप-मार्ग से दूसरे उप-मार्ग के भीतर से कॉल किया जाता है, तो ऊपर दिए गए तरीके से कॉल किया जाता है, मैं इसी तरह से उप-मार्ग के भीतर से कॉल करता हूं:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
इस तरह, त्रुटि "मुख्य" तक वापस फैल जाती है, इसलिए बोलने के लिए। बैच का मुख्य भाग तब त्रुटि हैंडलर GOTO: FAILURE के साथ त्रुटि को संभाल सकता है
GOTO :EOF