배치 스크립트에는 실행 시 파라메터로 넘어 오는 변수와 'set' 명령에 의해 정의 되는 두 가지 종류의 변수 타입이 있다.
실행 인자 변수
배치 파일 실행 인자로 넘어오는 변수는 %1, %2, %3 과 같이 %와 인자 순서를 이용하여 접근 가능하다.
Example
@echo off
echo %1
echo %2
echo %3
Output
1 2 3
SET 명령어에 의해 정의 되는 변수
문법
set 변수명=초기값
Note - 문자열을 저장한다면 '변수명=' 과 같이 붙여 써야 한다. 변수명과 '=' 사이에 공백이 있으면 문자열을 제대로 인식하지 못한다.
Example
@echo off
SET message=Hello World
echo %message%
위 예제에서 message가 set 명령어에 의해 정의 된 변수이며, 변수 message 의 값을 참조하기 위해서는 %~%로 감싸야 한다.
Output
Hello World
수치 변수(Numeric Variable)
일반적으로 배치 스크립트에서 변수는 문자열로 취급 되지만 /A옵션을 적용하면 자연수로써 사칙연산등에 이용할 수 있다.
set /A 변수명=초기값
Note - /A : 만일 변수를 자연수 타입으로 사용하고자 하면 이 옵션을 적용 한다.
Example
@echo off
SET /A a = 5
SET /A b = 10
SET /A c = %a% + %b%
echo %c%
Output
15
지역 변수와 전역 변수
전역 변수는, 별도의 한정자 없이 선언 된 배치 스크립트의 변수를 말한다. 배치 스크립트 어디에서든 접근 할 수 있고, 심지어 배치 스크립트가 종료 되어도 커맨드 창이 살아 있으면 여전히 유효하다. 이것은 자칫하면 다른 배치 스크립트 실행 시 참조 되는 같은 이름을 가진 전역 변수에 영향을 줄 수 있으므로 불필요한 전역 변수 남발 보다는 로컬 변수를 선언 하여 해당 스크립트 한정적으로 사용하는 것이 좋다.
로컬 변수는, SETLOCAL 커맨드를 호출 이후 ENDLOCAL, EXIT이 호출 되거나 배치 스크립트 끝까지 수행하기 전까지 선언 되는 모든 변수들은 로컬 변수로 간주된다.
Example
@echo off
set globalvar = 5
SETLOCAL
set var = 13145
set /A var = %var% + 5
echo %var%
echo %globalvar%
ENDLOCAL
- globalvar는 전역 변수로 선언 되었기 때문에 스크립트 어디에서든지 접근이 가능하다.
- var는 로컬 변수로 선언 되었기 때문에 SETLOCAL ~ ENDLOCAL 블록 내에서만 접근 가능하며 ENDLOCAL 이후에는 삭제 된다
Output
13150
5
배치 스크립트에서 환경 변수 사용하기
만일 배치 스크립트간에 변수를 공유해야 할 일이 있다면 환경 변수를 이용하는 것이 좋다. 일단 환경 변수가 정의 되면 %표시를 통해 어디에서든 접근이 가능하다. 아래 예제는 JAVA_HOME 환경 변수를 출력 하는 예제다.
@echo off
echo %JAVA_HOME%
Output
환경 변수의 값은 시스템 마다 다르기 때문에 아래의 결과는 단지 예제일 뿐이다. 각자의 실행 환경에서는 다른 결과가 나올 수 있다.
C:\Atlassian\Bitbucket\4.0.1\jre