질문과 답변

윈 도 우 재질문) setlocal의 지연확장과 call명령을 같이 사용해도 되나요?

2021.12.22 15:02

감기걸렸어요... 조회:176

배치파일에서 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을 같이 사용해도 되나요?

안된다면...

어떤 이유때문인지 궁금합니다... (일단 들었던 걸로는 전역화 때문이라는데... 여기에 대한 설명도 해주시면 감사하겠습니다... ㅠ)

번호 제목 글쓴이 조회 등록일
[공지] 질문과 답변 게시판 이용간 유의사항 gooddew - -
97134 기 타| 우회 프로그램 추천점 해주세요.. [18] 슈퍼소니코 971 06-15
97133 하드웨어| GPU VRAM 끌어올리는 방법 문의 [4] ThinkAbout 509 06-15
97132 기 타| 유머의 4가지 스타일 doha 347 06-15
97131 게 임| 유튜브 [2] 대충 494 06-15
97130 윈 도 우| Explorer 재시작 애러 납니다 [9] 넥스트타인 316 06-15
97129 윈 도 우| 윈도우 판올림이라는게 정확히 뭔가요? [8] 추추추 478 06-15
97128 소프트웨어| 우클릭 메뉴 script 질문 드립니다. [10] 세이퍼컴 304 06-15
97127 모 바 일| 태블릿 필기어플 추천부탁드립니다 [2] High][Land 192 06-15
97126 소프트웨어| undelete 프로그램 (현재 폴더에서 삭제된 파일 복구) [5] Abundance 351 06-15
97125 기 타| lg 복원이식하기 [1] Forum 426 06-15
97124 소프트웨어| 고수님들 수식 다시한번 부탁 합니다 [2] 놋지미 287 06-14
97123 윈 도 우| 망윔 만들기 [3] 홍은동초짜 386 06-14
97122 윈 도 우| win11설치된 M.2..보드교체후 윈도우 핀번호 에러나네요~ [2] 과불급 450 06-14
97121 소프트웨어| 코렐드로우 [2] 환자탄흑마 423 06-14
97120 기 타| 메일 인증 [1] 인생이잣같 372 06-14
97119 윈 도 우| Windows 7 설치 질문 [9] 동성회 479 06-14
97118 소프트웨어| 한글2022 체험판 설치파일 부탁드려요.. [2] 포토엔유 689 06-14
97117 소프트웨어| 긴급히 도움을 요청합니다. [1] 갠지스의잔 461 06-14
97116 기 타| 인터넷 500기가에서 100기가 다운할려는데 내방필요없겠져? [3] 我行 790 06-13
97115 소프트웨어| 수식좀 부탁 드립니다 [3] 놋지미 397 06-13
XE1.11.6 Layout1.4.8