호출 후 STMT에 반환하지만 나는 문제의
내 해석 (I 제목에 집중할 특히) 이해 생각 :
배치 파일의 여러 지점에서 ERRORLEVEL을 확인합니다. 오류를 발견 할 때마다 표준 오류 처리를 수행 한 다음 배치 스크립트를 종료해야합니다. 표준 처리를 수행하기 위해 서브 루틴을 작성하려고했으나 서브 루틴이 스크립트를 종료하는 대신 호출자에게 리턴합니다. 귀하의 질문은 호출자에게 반환하는 대신 오류 처리 루틴을 강제 종료하는 방법입니다.
는
답변 : 귀하의 오류 검출 것도 불리는 서브 루틴 내에서 발생하지 않으면
, 당신은 단순히 그것을 호출하는 대신 오류 프로세서를 고토 수 있습니다. 다른 호출 된 루틴 내에서 루틴 종료를 호출 할 수있게하려면
는, 당신은 CALL
문을 계속 사용할 수 있지만, EXIT
대신 GOTO :EOF
또는 GOTO :END
와 오류 루틴을 종료 할 수 있습니다. 응답
부록은
예, GOTO 매개 변수를 전달할 수 없습니다 언급하고, 호출 된 루틴은 항상 호출자에게 돌아갑니다
그리고 네, EXIT가 종료됩니다 (EXIT와 루틴이 종료하지 않는 한) 현재 CMD 쉘은 콘솔 창을 닫습니다.
하지만 ... 배치 파일을 다른 CMD 셸에서 실행할 수 있으므로 EXIT가 창을 닫지 않습니다!
배치 파일 (및 실행중인 CMD 셸)이 종료되면 환경에 대한 변경 사항이 손실된다는 단점이 있습니다. 그것은 당신을 위해 문제 일지도 모르거나 아닐지도 모른다.
@echo off
if "%~1" equ "_GO_" goto :main
cmd /c ^""%~f0" _GO_ %*^"
exit /b
:main
shift /1
echo %%1=%1 %%2=%2
echo before call
call :exitRoutine
:: should not get here
echo after call
exit /b
:exitRoutine
echo exiting batch file witin exitRoutine
exit
MS-DOS를 사용하고 있지 않습니까? –
Windows 2003의 DOS 배치 스크립트 – chrys2012
"DOS"배치 스크립트 (Windows Server 2003의 경우)와 같은 것은 없습니다. 여전히 Windows 배치 스크립트입니다. –