질문과 답변

윈 도 우 배치파일 고수님들 도와주세요...) 배치파일 setlocal 지연확장과 call 명령...

2021.12.22 13:59

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

배치파일에서 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 - -
92270 소프트웨어| 여쭙니다 [2] 한아름 412 01-16
92269 하드웨어| 노트북 업그레이드 질문입니다.. [1] High][Land 270 01-16
92268 윈 도 우| 오래된 노트북 무선 드라이버가 지원안돨때 무선 wifi us... [8] 푸레이얼 619 01-15
92267 하드웨어| 소음때문에 뜯었는데 노트북 히트씽크 쿨링팬부분에 써멀 ... [7] 퉁가리 742 01-15
92266 윈 도 우| gpt 형식의 디스크에 윈도우설치하고 tib확장자로 백업후에... [5] SUbSigNal 772 01-15
92265 소프트웨어| 우클릭 메뉴 삭제 방법 [7] 안정 821 01-15
92264 기 타| NumLock,... [5] 토끼다 569 01-15
92263 소프트웨어| 대량의 이미지파일을 분할로 만들수있는방법없을까요? [1] 렛고 344 01-15
92262 모 바 일| 스마트폰 배터리 관련입니다. [10] 타임머신 492 01-15
92261 기 타| 옛날에님 Office LTSC 2021 32비트 버전좀 부탁 드립니다 [1] 나라하늘 495 01-15
92260 하드웨어| usb조끼용으로 이 배터리 괜찮을까요? [5] brucex 441 01-15
92259 기 타| Rainmeter의 일기 예보에 사는 곳을 표시 하고 십습니다. [7] Nayu 514 01-14
92258 기 타| 명령 기호에 대한 질문입니다. [6] 하늘은높고 364 01-14
92257 윈 도 우| 사진 배경만 어둡게 해주실분 [3] 아톰이랏 636 01-14
92256 소프트웨어| 사진 불필요한 부분 지워 주실분 [6] 대하리 616 01-14
92255 윈 도 우| 사무실 컴퓨터가 아침 첫 부팅시에만 멈추는 현상이 있습니다. [11] 드림프리 834 01-14
92254 하드웨어| 마우스가 클릭만 해도 더블클릭이 됩니다. [3] brucex 474 01-14
92253 하드웨어| 12세대 메인보드는 MBR지원되나요? [2] cosmodrome 591 01-14
92252 윈 도 우| win10 업데이트 관련하여 질문이 있습니다.. [3] 카누 287 01-14
92251 윈 도 우| 윈도우 인증키 인증횟수 확인 방법(키요청아님) [4] 클리어파일 679 01-14
XE1.11.6 Layout1.4.8