ฉันจะออกจากแบตช์ไฟล์จากภายในรูทีนย่อยได้อย่างไร
ถ้าฉันใช้คำสั่ง 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
คำสั่ง double-pipe ของ:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
จดชวเลข
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
ฉันยังคงอยากรู้ว่ามีวิธีที่จะออกโดยตรงจากรูทีนย่อยแทนที่จะต้องให้ CALLER จัดการกับสถานการณ์ แต่อย่างน้อยก็ทำให้งานเสร็จ
อัปเดต # 2: เมื่อเรียกรูทีนย่อยจากภายในรูทีนย่อยอื่นที่เรียกในลักษณะข้างต้นฉันเรียกจากรูทีนย่อยภายในดังนี้:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
ด้วยวิธีนี้ข้อผิดพลาดแพร่กระจายกลับไปที่ "หลัก" เพื่อพูด ส่วนหลักของแบทช์สามารถจัดการข้อผิดพลาดได้ด้วย GOTO: FAILURE
GOTO :EOF