2016-09-19 2 views
0

를 호출 한 후 나는 작은 배치 테스트 스크립트를 작성했습니다 :잘못된 순서로 기능

echo start 
call:errorcheck "test" 
echo main 
goto exit 

:errorcheck 
echo errorcheck: %1 
goto exit 

:exit 
echo end 

출력 :

start 
errorcheck: "test" 
end 
main 
end 

내가 입력하지 않고 기능 errorcheck 다음 고토 종료를 호출 할 " 주요 부분. 그러나 스크립트는 "main"섹션으로 돌아갑니다. 뭐가 문제 야?

+5

왜 당신이 다음'call'를 사용하고 있습니까? 'call'의 목적은 호출자에게 돌아 오는 것입니다. 돌아 가지 않고 어딘가로 점프하려면'goto '를 사용하십시오; 'goto'는'call'과 같은 매개 변수를 받아들이지 않습니다; 그래서'call : errorcheck "test"& got : exit'를 번갈아 가며 ...? 그건 그렇고 : 그 이름을 가진 내부 명령이 있기 때문에 레이블 이름으로'exit'을 사용하지 마십시오; 예를 들어'end' 또는'quit'과 같이 다른 것을 사용하십시오 ... – aschipfl

답변

1

하위 기능으로는이 작업을 수행 할 수 없으며 항상 복귀합니다.

하위 함수를 끝내는 일반적인 구문은 goto :eof이며, 스크립트의 끝 부분에 내재되어 있습니다 (echo end 이후). exit 0조차도 호출 코드로 되돌아갑니다.

당신은 두 번째를 피하기 출력을 "종료"를 주요 코드에서 call 후 (AN exit 또는 goto :eof으로. 예) 프로그램을 종료 한 후 몇 가지 조건을 확인해야 할 것

.

예 :

echo start 
call:errorcheck "test" 
if errorlevel 1 exit /b 1 
echo main 
goto exit 

:errorcheck 
echo errorcheck: %1 
if <some error condition> exit 1 
exit 0 

:exit 
echo end 
관련 문제