질문과 답변

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

2021.12.22 15:02

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

배치파일에서 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 - -
91985 윈 도 우| 작업표시줄의 색대비가 명확하도록 하는 방법이 있나요? [3] shot4u 259 12-24
91984 윈 도 우| (해결)파티션 병합 실수 (UEFI 파티션 복구) [3] 카비 455 12-24
91983 기 타| 무월님 자료는 어떻게 받나요? [4] 떠중이 597 12-23
91982 소프트웨어| 인식이 안되는 동적디스크 복구 문의 [1] 아름드리나 385 12-23
91981 윈 도 우| 이것을. 윈도우10 처럼 나오게 할수 없나요? [4] 기억의저편 707 12-23
91980 소프트웨어| 컴퓨터 부팅시 배치 파일 자동으로 실행되게 만드는 방법 [7] Airbrone13 680 12-23
91979 윈 도 우| winPE파일 수정하는법(bcd에러발생) [2] 짱구박 328 12-23
91978 서버 / IT| traffic ip address에 대한 고수님의 도움은 부탁합니다 gebi 163 12-23
91977 윈 도 우| Win 11 defender 만 제설치가 가능할까요? [4] 메인보드 492 12-23
91976 소프트웨어| You Tube 다운로더중 싱크가 잘 맞는 프로그램 없을까요? [9] 밸록 320 12-23
91975 윈 도 우| 노트북에 Win10 Lite 버전을 설치 후 ~~~ 업데이트 문제 !!! [11] 띄엄띄엄 629 12-22
91974 윈 도 우| install.wim 질문있어요~ [6] 악마와동침을 473 12-22
91973 윈 도 우| C드라이브 이미지 떠서 하드 옮겼는데 용량이 늘었습니다. [5] 我行 445 12-22
91972 윈 도 우| 노트북 특정 키가 간헐적으로 입력되지 않는 현상 (★BIOS ... [3] 풀꾹새 400 12-22
91971 소프트웨어| XP시작화면은 클래식쉘밖에 지원 안하는지요. [2] 건조한치는 393 12-22
» 윈 도 우| 재질문) setlocal의 지연확장과 call명령을 같이 사용해도 ... [22] 감기걸렸어요... 210 12-22
91969 하드웨어| PC 본체 질문 하나만 드리겠습니다ㅠㅠ [5] 천공의아키 528 12-22
91968 윈 도 우| 배치파일 고수님들 도와주세요...) 배치파일 setlocal 지연... [3] 감기걸렸어요... 312 12-22
91967 윈 도 우| 제컴이 분명히 문제가 있습니다 [7] SKorea 521 12-22
91966 윈 도 우| Wimboot로 윈도우 10 설치후 작업표시줄 우측이 보이지 않... [4] 나는돈 299 12-22
XE1.11.6 Layout1.4.8