2014-11-21 7 views

답변

1

올바른 라벨을 부르는 것으로 가정하면 이미 그렇게됩니다. (: myroutine! = : 루틴). 스크립트에 몇 가지 사소한 문제가 있습니다 (:routine 앞에 goto :EOF이 누락되어 있고 @echo offsetlocal을 수행 중입니다). 여기가 해결되었습니다

@echo off 
setlocal 
rem declaring variable 
set "vara=" 
echo vara:%vara% bef 
call :routine 
echo vara:%vara% aft 

set "vara=" 
goto :EOF 

:routine 
rem ... 
rem assing value to variable vara 
set "vara=34" 
echo vara was assigned... 
rem .... 
echo vara:%vara% 
exit /b 

자세한 내용은 서브 루틴/함수를 호출에 대해, this page 값을 반환하는 다른 방법에 관한 섹션에 특별한 관심을 지불 참조하십시오. 질문에서 설명한 내용은 이미 :routine에있는 setlocal을 제외하고는 원하는대로 작동합니다.

+0

goto를 사용하면 차이가 있습니다 : EOF exit/b? . . setlocal을 사용하면 어떤 이점이 있습니까? – Anita

+0

이 스크립트에서는'goto : EOF'와'exit/b' 사이에는 차이가 없습니다. 이 둘 사이의 진정한 차이점은 'exit/b'는 원하는 경우'% ERRORLEVEL % '을 0이 아닌 값으로 설정할 수 있다는 것입니다. 자세한 내용은 [이 페이지] (http://www.robvanderwoude.com/exit.php)를 참조하십시오. 'setlocal'을 사용하면 스크립트가 스크립트와 관련된 변수 만 사용하여 운영 환경을 중단시킬 수 없습니다. 'setlocal'이 없으면'% vara %'는 스크립트가 종료 된 후에도 정의 된 채로 남게됩니다. 그렇지 않으면'set "vara ="'행이 없게됩니다. 의도적으로하지 않는 한 대개는 환영받지 못합니다. – rojo