질문과 답변

윈 도 우 재질문) 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 - -
97372 윈 도 우| 윈도우7 워터마크 제거 어떻게 하나요? [2] 스카이 6466 03-09
97371 win7 익스플로러8 제거후 재설치 왕따 6465 09-15
97370 윈 도 우| 윈도우7 정품dvd구입하였는데요 [4] 참마도123 6464 11-12
97369 ai 최신버전 [3] 헤도니스 6459 09-17
97368 윈 도 우| 윈도우10 테스트 모드 [4] 아름드리나 6458 07-28
97367 하드웨어| SATA 케이블 포트 위치 바꾼 후 winload.exe 손상 [9] 오징어튀김 6457 01-28
97366 윈 도 우| 윈도우7 xp모드 virtual pc 업데이트 구성 실패.. [1] 질풍화 6456 07-28
97365 윈 도 우| 종료 할때 오래 걸림... [1] lphyxsius 6456 11-13
97364 하드웨어| 구글 크롬 플러스 제거 어떻게 하나요... [2] 윈도우포럼따라잡기 6454 11-22
97363 윈 도 우| 윈도우 7 비밀번호 알아내는법 [7] 떙호 6450 08-07
97362 기 타| 오피스2010 포터블 만들기 에러..도와주세요. [5] 랄라탑 6449 01-28
97361 서버 / IT| 서버 2008 R2 설치후 언어팩 도와주세요 [3] 메챠쿠챠 6449 09-09
97360 vistabootpro 사용 하고서 화면이 영어로 바뀌었어요!!!!!!... 최건호 6449 10-14
97359 윈 도 우| 윈도우7에서 전면 패널 이어폰이 작동하지 않습니다. [3] 신조 6448 02-03
97358 윈 도 우| usb 가상화 커넥터 드라이버ㅡㅡ;; [1] 야사단 6446 01-21
97357 Intel(R) ICH9 LPC Interface Controller - 2918 알수없는... [3] takejin7 6446 08-30
97356 Desktop 사용 가능하지 않는 위치 참조 [5] Lucky7 6442 08-11
97355 비스타에 관해서 질문좀하나 더 드릴께요 [1] 김덕배 6442 10-20
97354 서버 / IT| 윈도우즈 2003 R2 ent 32비트 언어팩 변경 입니다 [2] 세상을 다 6441 04-10
97353 윈 도 우| 윈도우8에서 하드 액세스 권한 문제 [2] 노엘 6441 09-15
XE1.11.6 Layout1.4.8