setlocal
- setlocal과 endlocal 이란?
setlocal은 배치 파일 내에서 환경 변수나 코드 블록이 현재 세션에서만 적용되도록 설정하는 명령어이고 endlocal은 setlocal에 의해 생성된 지역 환경 설정을 원래 상태로 복구하는 명령어이다.
- endlocal을 생략할 수 있는 경우
일반적으로 배치 파일이 끝나면서 세션이 종료되면 자동으로 endlocal이 적용되므로, 배치 파일 마지막에서 endlocal을 생략해도 큰 문제가 생기지 않는다. 하지만 배치파일 내에서 다른 배치파일을 호출하거나 연달아 여러 배치파일을 호출하는 경우 각 setlocal에 맞는 endlocal을 명시적으로 추가해주는 것이 안전하다.
- setlocal을 사용해야 하는 경우?
- 배치 파일 내에서 다른 배치파일을 호출하거나 여러 배치 파일을 연달아 호출하는 경우 서로 다른 배치 파일에서 동일한 환경 변수를 사용하더라도 서로 영향을 주지 않도록 환경을 분리하고자 할 때
- 배치 파일 실행 중 특정 경로에서만 작업을 진행하고, 종료 시 원래 경로로 되돌아가도록 할 때
- 배치 파일 내부에서만 임시로 설정하는 환경 변수가 해당 배치 파일이 끝나고 난 뒤 시스템 전체에 영향을 미치지 않도록 보호하고자 할 때
@echo off
setlocal
:: PATH를 일시적으로 변경
set "PATH=%PATH%;C:\NewPath"
echo 현재 PATH: %PATH%
:: 여기서 PATH가 변경된 상태로 프로그램 실행
:: ...
endlocal
setlocal enabledelayedexpansion
- setlocal enabledelayedexpansion 을 사용해야 하는 경우?
기본적으로 배치 파일에서는 변수의 값을 %변수명% 형태로 참조하는데 일반적인 경우에는 변수 값을 갱신한 뒤 %변수명%으로 참조해도 문제가 없다. 하지만 for 루프나 if 문 안에서 변수를 갱신하고 %변수명%으로 참조하면 갱신되기 전의 값이 읽히는 문제가 있다.
이 때는 enabledelayedexpansion을 사용하고 !변수명! 형태로 참조하면 for나 if 구문 안에서 갱신된 변수 값을 실시간으로 참조할 수 있다.
@echo off
setlocal enabledelayedexpansion
set "folder_path=.\test_files"
set "keyword=sample"
set "count=0"
for %%f in ("%folder_path%\*") do (
set "file_name=%%~nxf"
if "!file_name!"=="%keyword%" (
set /a count+=1
)
)
echo Files with keyword "%keyword%": !count!
endlocal
'운영체제 > Windows' 카테고리의 다른 글
배치파일에서 call 명령어 사용법 (0) | 2024.12.15 |
---|---|
배치 파일에서 명령 인수 활용법 (0) | 2024.12.13 |
DISM을 사용하여 Windows 기능 켜기/끄기 하는 법 (0) | 2024.10.16 |
Windows ] IP가 169.254.x.x로 설정되어 바뀌지 않을 때 해결 방법 (0) | 2024.09.20 |
배치 파일 활용하여 윈도우 명령 프롬프트에서 사용할 커스텀 명령어 만들기 (0) | 2024.08.02 |