윈 도 우 배치파일 고수님들 도와주세요...) 배치파일 setlocal 지연확장과 call 명령...
2021.12.22 13:59
배치파일에서 setlocal 지연확장(enabledelayedexpansion)과 call 명령을 같이 사용해도 되나요?
다른 글에서 보았는데... 무슨 전역화? 이런거 때문에 안된다고 했던거 같은데 이해를 잘못하겠네요...
그리고 다름이 아니라 이렇게 setlocal 지연확장과 call을 같이 사용하려는 이유는 대략 두가지 때문입니다...
------------------------------------------------
(첫번째 배열)
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b ^|findstr "[^a-z][^0-9].txt"') do (
set /a number+=1
set var[!number!]=%%i
call echo %%var[!number!]%%
)
pause
------------------------------------------------
이처럼 동적으로 변수를 생성하고 해당 변수의 값을 찍으려면 다른 방법도 있겟지만...
이렇게 setlocal 지연확장과 call 명령을 같이 사용하면 좀 더 쉽게 소스작성이 되는거 같아 이렇게 같이 사용해도 된다면 이렇게 사용하고 싶더군요...
또 !변수!와 같은 기능도 지금 소스에서는 배열의 첨자부분에만 사용하지만...
다른 소스에서는 뭐... 배열 인덱스에 쓸 변수말고도 여러 다른 변수를 선언하고 쓸 수도 있으니...
강력한 setlocal 지연확장도 취할 수도 있고...
------------------------------------------------
(두번째 함수)
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b ^|findstr "[^a-z][^0-9].txt"') do (
set /a number+=1
set var[!number!]=%%i
call :lavel
)
goto eof
:lavel
call echo %%var[%number%]%%
exit /b
:eof
pause
------------------------------------------------
함수에 관한 소스는 딱히 call로 라벨을 이동할 필요가 없는 함수긴 하지만...
그냥 전달하고자 하는 것은...
이처럼 setlocal 지연확장을 사용하면서 call (:레이블)로 함수를 타고 싶어서입니다...
예로 call이 아닌 goto로 작성하면...
------------------------------------------------
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b ^|findstr "[^a-z][^0-9].txt"') do (
set /a number+=1
set var[!number!]=%%i
goto :lavel
:endfunction
)
goto eof
:lavel
call echo %%var[%number%]%%
goto endfunction
:eof
pause
------------------------------------------------
")은(는) 예상되지 않았습니다."
라는 오류 문구가 뜨기 때문입니다...
그래서 정리하자면...
setlocal 지연확장과 call을 같이 사용해도 되나요?
안된다면...
어떤 이유때문인지 궁금합니다... (일단 들었던 걸로는 전역화 때문이라는데... 여기에 대한 설명도 해주시면 감사하겠습니다... ㅠ)
댓글 [3]
-
감기걸렸어요... 2021.12.22 14:58 -
DarknessAngel 2021.12.22 18:02
시험삼아 스크립트 하나 만들어서 거기
setlocal enabledelayedexpansion
해준후 시험용 변수에 값 하나 입력후 함수에는
echo
로 변수값 출력하게 해놓고,
call
해보세요
정상 작동하면 제대로 되는겁니다
참고로 )에러는 주로 특문이라던가 그런거 입력할때 주의 안 하면 자주 보게 됩니다 (의심스러우면 ^ 일일히 붙여보시고, '나 " 개수도 맞나 잘 확인해보세요)
-
감기걸렸어요... 2021.12.22 22:59 아... 정상적으로 돌아가기는 하는데...
"다른 글에서 보았는데... 무슨 전역화? 이런거 때문에 안된다고 했던거 같은데 이해를 잘못하겠네요..."
이처럼 같이 사용하면 안된다고 해서 왜 그런가에 대해 궁금해서 질문드려봤습니다
답변 감사합니다...
그냥 같이 사용해도 되는건가요?
msdn에서 아무리 찾아봐도 같이 사용하지 말란 말은 없던데...
그냥 같은 이름의 변수가 중복 사용될수 있기에 저런말을 했던건지 잘 모르겠네요...