-1
루틴 ...이 같은설정 해제 변수, 범위 CMD 스크립트 윈도우, 나는이 문제를 해결하는 방법을 알고 싶어
vara: bef
vara was assigned
vara:34
vara:34 aft
VARA : 34 후미 방법 그걸 할거야?
루틴 ...이 같은설정 해제 변수, 범위 CMD 스크립트 윈도우, 나는이 문제를 해결하는 방법을 알고 싶어
vara: bef
vara was assigned
vara:34
vara:34 aft
VARA : 34 후미 방법 그걸 할거야?
올바른 라벨을 부르는 것으로 가정하면 이미 그렇게됩니다. (: myroutine! = : 루틴). 스크립트에 몇 가지 사소한 문제가 있습니다 (:routine
앞에 goto :EOF
이 누락되어 있고 @echo off
과 setlocal
을 수행 중입니다). 여기가 해결되었습니다
@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
을 제외하고는 원하는대로 작동합니다.
goto를 사용하면 차이가 있습니다 : EOF exit/b? . . setlocal을 사용하면 어떤 이점이 있습니까? – Anita
이 스크립트에서는'goto : EOF'와'exit/b' 사이에는 차이가 없습니다. 이 둘 사이의 진정한 차이점은 'exit/b'는 원하는 경우'% ERRORLEVEL % '을 0이 아닌 값으로 설정할 수 있다는 것입니다. 자세한 내용은 [이 페이지] (http://www.robvanderwoude.com/exit.php)를 참조하십시오. 'setlocal'을 사용하면 스크립트가 스크립트와 관련된 변수 만 사용하여 운영 환경을 중단시킬 수 없습니다. 'setlocal'이 없으면'% vara %'는 스크립트가 종료 된 후에도 정의 된 채로 남게됩니다. 그렇지 않으면'set "vara ="'행이 없게됩니다. 의도적으로하지 않는 한 대개는 환영받지 못합니다. – rojo