질문과 답변

윈 도 우 재질문) 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 - -
98115 윈 도 우| 다른 Windows의 아이콘팩을 어떻게 추출해서 자기의 Window... [2] fkjin 274 10-22
98114 하드웨어| asrock z590 taichi m.2 관련 [1] 엉클퍼커 159 10-21
98113 윈 도 우| 윈도우 부팅 관리자(검정화면) 안뜨게 하려면 BOOTICE에서 ... [5] 엉클퍼커 362 10-21
98112 하드웨어| 메모리 확장 [5] 어차피 577 10-21
98111 소프트웨어| pe 부팅 후 snapshot이 자동 복구되게 할 수 있을까요? [6] ksire 376 10-21
98110 하드웨어| 메모리 [1] 어차피 305 10-21
98109 하드웨어| 견적 좀 해 주세요 [4] 지구여행중 315 10-21
98108 윈 도 우| Microsoft Visual C++ 2008 서비스 팩 1 재배포 가능 패키... [2] 향기나 288 10-21
98107 윈 도 우| 윈도우11 쓸만한가요? (윈10 유저입니다) [7] 컴알못러 848 10-21
98106 소프트웨어| 윈도우 재설치후 한글2020 렉걸림 문제 컴알못러 231 10-21
98105 윈 도 우| Win10_22H2 시작버튼 메뉴에 아이콘들 [2] 건둘지망 314 10-21
98104 윈 도 우| tpm [3] 개골구리 392 10-21
98103 소프트웨어| [질문] 노트북하드디스크를 vmware 이미지 생성 [6] 번개 240 10-21
98102 모 바 일| 휴대폰 카메라 앨범 백업이 다차서 클라우드 [3] zizer7ener 153 10-21
98101 윈 도 우| 특정 폴더를 인터넷으로 연결하는것을 못하게 할수 없을까요, [2] 가족넷 237 10-20
98100 소프트웨어| everything 에 대하여. [3] 도파니 516 10-20
98099 소프트웨어| 윈도우11 봉인과 캡쳐방법에 대한 질문입니다, [5] 좋은데이 297 10-20
98098 하드웨어| 라이젠 CPU온도와 램오버 질문드려요 [4] 『ⓖⓤⓝ』 244 10-20
98097 윈 도 우| 설치된앱에서 여러개... 지울수 있나뇨? assa 183 10-20
98096 기 타| 프로그래밍 고수님들 ..내용 좀 봐주세요... [2] cosmosa 304 10-20
XE1.11.6 Layout1.4.8