질문과 답변

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

2021.12.22 13:59

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

배치파일에서 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 - -
92059 소프트웨어| 간혹 사이트에 올라오는 안드로이드용 어플은 어떻게 설치... [4] QOR 509 12-30
92058 윈 도 우| 이것 없을 수 없나요? [4] rthgh 644 12-30
92057 소프트웨어| 랜섬웨어의 궁금점 [10] Airbrone13 681 12-30
92056 윈 도 우| Windows11 작업 표시 줄 시간 요일 표시 이상 [3] 아브라함 453 12-30
92055 하드웨어| 메인보드 USB 3.0 단자에 C타입 케이블을 꼽으면 충전속도... [3] 『ⓖⓤⓝ』 963 12-30
92054 윈 도 우| 윈도우11설피 이미지 중 uefi지원되는 거 부탁합니다 [3] brucex 457 12-29
92053 윈 도 우| KoIME v1.0으로 Bob.Ombs.Modified.Win10PEx64.v4.98을 한... [2] 무주처사 366 12-29
92052 윈 도 우| 윈도우에서 11로 업데이트때에는 tpm 바이패스가 안되는 거... [4] brucex 667 12-29
92051 기 타| 카리스마조님 Win11XPE143로 PE빌드시 VGA드라이버 포함 [4] 오늘도... 688 12-29
92050 소프트웨어| PE 수정 후 발견된 에러 관련 [2] 안정 304 12-29
92049 하드웨어| "ASRock Restart to UEFI"로 컴이 재부팅 되어서... [6] brucex 1231 12-29
92048 소프트웨어| suk님 메모장대체 프로그램 질문입니다. [4] UU自適 398 12-29
92047 소프트웨어| 크롬, 웨일.. 앱 아이콘 등록 [2] 윈도면도 272 12-29
92046 소프트웨어| 오라클 설치시 각각 용량? [1] 번개 136 12-29
92045 윈 도 우| win_pe 바탕화면 아이콘의 크기 조절 [4] 짱구박 474 12-29
92044 하드웨어| 블루투스 연결후 잡음이 들립니다 [3] joe 365 12-29
92043 윈 도 우| 설치 WIM 파일에 그래픽 드라이버 추가시 문제 [2] 상발이 172 12-29
92042 윈 도 우| 윈도우10 21H2는 Intel Microcode 설치가 안되네요 [2] feynman 403 12-29
92041 윈 도 우| win 11에서 IDM 확장프로그램 비활성 해결 방법 있나요? [4] SLF 357 12-29
92040 하드웨어| 채굴기에 왜 비디오카드가 여러장 들어가나요? [4] 보호자 662 12-28
XE1.11.6 Layout1.4.8