라이프로그


SETLOCAL ENABLEDELAYEDEXPANSION Windows

Windows Batch 에서 지연된 환경 변수 쓰기

출처 : http://boom.springnote.com/pages/4195511 

Windows Batch는 Unix Shell과는 다르게 변수가 세팅되면 전역적으로 그 변수의 값이 해당 값으로 바뀐 상태로 돌아가게 된다.

  • Unix Shell
   1: num=0
   2: for i in 1 2 3 4; do
   3:     num=$num:$1
   4: done
   5: echo $num
  • 결과
   1: 0:1:2:3:4

같은 방법으로 Windows Batch로 작성해 보았다.

  • Windows Batch
   1: @echo off
   2: set num=0
   3: for %%i in (1 2 3 4) do {
   4:     set num=%num%:%%i
   5: }
   6: echo %num%
  • 결과
   1: 0:4

결과가 예상과 다르다. ‘set num\%num%:%%i’ 부분이 ‘set num=0:%%i’ 로 치환되서 돌기 때문에 마지막 실행된 4만 적용된 것이다.

이것을 방지하기 위해서는 ‘SETLOCAL ENABLEDELAYEDEXPANSION’ 를 미리 선언해 주고, 변수를 ‘%’ 대신 ‘!’ 를 이용하여 표시하면 된다.

  • Windows Batch
   1: @echo off
   2: setlocal enabledelayedexpansion
   3: set num=0
   4: for %%i in (1 2 3 4) do (
   5:     set num=!num!:%%i
   6: }
   7: echo $num%
  • 결과
   1: 0:1:2:3:4

혹은 ‘SETLOCAL ENABLEDELAYEDEXPANSION’  대신 실행창을 ‘cmd /V:ON’ 로 실행하면 지연된 변수를 쓸 수 있다.


덧글

  • ㄹㄹ 2016/12/20 04:41 # 삭제 답글

    캄사여. 도움됐어요!
댓글 입력 영역