메뉴 건너뛰기


Developer > Operating System

MS-DOS 변수의 참조

2014.08.26 19:40

푸우 조회 수:6002


변수의 참조


변수명의 앞뒤에 %를 붙여 기본적으로 참조할 수 있습니다.


ECHO %PATH%


- 변수의 종류

DOS에서 사용되는 변수를 유형별로 나눈다면 다음과 같습니다.


1) 환경변수cmd.exe 가 실행되면 이미 설정되어 있는 변수입니다.

   환경변수는 또 다시 시스템 전체에 설정된 "시스템 변수"와 사용자 별로 설정된 "사용자변수"가 있습니다. 

   이들 변수는 윈도우즈의 "제어판>시스템 및 보안 > 시스템"화면에서 "고급 시스템 설정"에서 "고급"탭에 들어가면 "환경변수"버튼을 클릭하여 설정할 수 있습니다.

   envvar.png


2) 사용자 변수 : cmd.exe 가 실행된 후 생성된 변수입니다.

   사용자 변수는 명령프로프트 상에서 혹은 Batch 파일 상에서 SET명령에 의해 생성되는 변수입니다.

   사용자 변수는 해당 Cmd Shell에서만 존재하며 Cmd 창이 닫히면 사라집니다.


3) 동적 환경 변수 : 변수 값이 참조될 때마다 동적으로 계산되어 값을 갖는 변수를 의미합니다.

   동적 환경 변수에는 다음과 같은 것들이 있습니다.


%CD% - 현재 디렉터리 문자열로 확장합니다.

%DATE% - DATE 명령과 같은 포맷을 사용하여 현재 날짜로 확장합니다.

%TIME% - TIME 명령과 같은 포맷을 사용하여 현재 시간으로 확장합니다.

%RANDOM% - 0과 32767 사이에 있는 임의 숫자로 확장합니다.

%ERRORLEVEL% - 현재 ERRPRLEVEL 값으로 확장합니다

%CMDEXTVERSION% - 현재 명령 프로세서 확장자 버전 번호로 확장합니다.

%CMDCMDLINE% - 명령 프로세서를 호출하는 원본 명령줄로 확장합니다.

%HIGHESTNUMANODENUMBER% - 이 컴퓨터의 최고 NUMA 노드 수로 확장합니다.



- 변수의 고급 참조

변수의 일부분을 참조하거나 다른 값으로 치환해서 참조하기와 같은 고급 변수 참조 방법이 있습니다.


1) 특정 문자열로 치환 참조

변수의 특정 문자열 패턴들을 다른 문자열로 치환해서 참조합니다.


%변수명:패턴,치환할문자열%


"치환할 문자열"을 생략함으로써 해당 패턴 부분을 삭제할 수 있습니다. 

"패턴"의 첫번째 글자가 별표(*)로 시작할 수 있습니다. 이 경우에는 맨처음부터 *을 제외한 나머지 패턴이 나타나는 첫 문자열까지가 일치되어 치환됩니다.


예로 환경 변수 PATH에 나타나는 모든 x86이라는 문자를 x64로 치환해서 참조하는 경우는 다음과 같이 할 수 있습니다.

ECHO %PATH:x86=x64%

2) 변수의 부분문자열 참조

변수의 부분문자열을 참조하기 위하여 다음과 같이 참조하고자 하는 시작위치(오프세트)와 시작위치로 부터의 문자열의 길이를 지정하는 방법으로 참조할 수 있습니다.


%변수명:~시작위치,길이%


SET MYVAL=Hello My Friend
ECHO %MYVAL:~6,2%
위의 결과 "My"가 출력됩니다.


"길이"를 지정하지 않으면 시작위치에서부터 마지막까지의 길이로 지정됩니다.

SET MYVAL=Hello My Friend
ECHO %MYVAL:~9%
위의 결과 "Friend"가 출력됩니다.


"시작위치"를 음수로 지정하면 변수의 맨뒤에서부터의 시작위치번째의 값부터 참조됩니다.

SET MYVAL=Hello My Friend
ECHO %MYVAL:~-9%
위의 결과 "My Friend"가 출력됩니다.


"길이"가 음수로 지정되면 변수의 전체길이에서 "길이"만큼을 뺀 길이가 지정됩니다.

SET MYVAL=Hello My Friend
ECHO %MYVAL:~0,-3%
위의 결과 "Hello My Fri"가 출력됩니다.


- 응용

다음과 같이 %DATE%와 %TIME% 동적 환경 변수를 이용해서 숫자로만 구성된 날짜와 시간을 만들어 사용하면 아주 유용 합니다.

SET TODAY=%DATE:~0,4%%DATE:~5,2%%DATE:~8%
SET NOW=%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
SET TIMESTAMP=%TODAY%%NOW%




크리에이티브 커먼즈 코리아 저작자표시 Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락/3.0에 따라 이용하실 수 있습니다