[컴] windows batch 의 EnableDelayedExpansion

왜 한줄 command 에서 set 이 동작하지 않는가 / doskey 설정시 주의할 점 / 문제점 / windows batch programming 문제

windows batch 의 EnableDelayedExpansion

  • EnableDelayedExpansion 은 기본적으로 cmd 에서 Disabled 되어 있다.
  • cmd /v 로 활성화 될 수 있다.
  • SETLOCAL DisableDelayedExpansion 로 끌 수 있다.(다만 .bat file 내에서 가능한 듯 하다. cmd 창에서 실행하면 유지 되지 않는 것 처럼 보인다.)
  • registry 로 활성화 할 수 있다. 그런데 추천하지 않는다. 기본값을 변경하면, 기존의 script 가 break 될 수 있다.
  • 그리고 ! 를 바로 사용할 수 없다. (참고)

Why this behaviour? The SET command was first introduced with MS-DOS 2.0 in March 1983, at that time memory and CPU were very limited and the expansion of variables once per line was enough. Delayed Expansion was introduced some 16 years later in 1999 by which time millions of batch files had been written using the earlier syntax. Retaining immediate expansion as the default preserved backwards compatibility with existing batch files.

This is not how anyone would design a language if starting from scratch, indeed PowerShell behaves like this:

PS C:> $demo = “First” PS C:> $demo = “Second” ; echo $demo Second

See Also

  1. 쿠…sal: [컴] windows batch programming 관련 글

Reference

  1. EnableDelayedExpansion - Windows CMD - SS64.com

댓글 없음:

댓글 쓰기