프로그래밍

배치 파일에서 날짜 관련 문자열(yyyymmdd) 만들기

채윤아빠 2012. 4. 17. 16:08
728x90
반응형
DATE 명령
배치 파일에서 날짜 관련 문자열 만들기 위해서는 "date" 명령을 사용해야 합니다.
커맨드 라인에서 date 명령을 입력하면 현재 날짜를 표시하고 날짜를 변경할 수 있습니다. 날짜 관련 문자열을 만드는데는 단순히 현재의 날짜 정보만 얻으면 되므로, 파라미터 "/t"를 붙여서 실행합니다.
하지만, 영문 윈도우와 한글 윈도우의 "date /t" 결과가 다릅니다.
아래는 한글 윈도우의 결과입니다.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\hbesthee>date /t
2012-04-17

C:\Users\hbesthee>

아래는 영문 윈도우의 결과입니다.
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\hbesthee>date /t
Tue 04/17/2012

C:\Users\hbesthee>


날짜 문자열(yyyymmdd) 만들기


1. FOR 문을 사용하여 만드는 방법
FOR /F "tokens=1-4 delims=- " %%i IN ('date /t') DO SET yyyymmdd=%%i%%j%%k
REM FOR /F "tokens=2-6 delims=/ " %%i IN ('date /t') DO SET yyyymmdd=%%k%%i%%j
ECHO %yyyymmdd%
위와 같이 코딩을 하고, 배치 파일로 저장(예: for_test.bat)하여 실행하면, "20120417"이 출력됩니다.

FOR 문을 이용하여 "date /t"의 문자열을 받아서, 구분자(delims)에 있는 문자들로 구분하여 토크 배열(tokens)을 만들고, 그중에서 1~4번까지의 항목들을 가져와서 첫 번째 것은 %i로 받고, 차례로 %j, %k로 날짜 정보를 분리합니다.
분리된 날짜 정보를 마지막 SET 명령에서 하나의 문자열로 합치고, ECHO 명령으로 생성된 yyyymmdd 변수의 값을 출력합니다.
영문 윈도우의 경우, 주석(REM)으로 해 놓은 두 번째 줄로 실행해야 동일한 결과("20120417")가 만들어 집니다.

2. SET 명령의 표현식을 이용하여 만드는 방법
SET yyyymmdd=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
REM SET yyyymmdd=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%
ECHO %yyyymmdd%

위와 같이 코딩을 하고, 배치 파일로 저장(예: set_test.bat)하여 실행하면, "20120417"이 출력됩니다.

SET 명령문으로 환경변수를 설정할 때, 다음의 표현식들을 사용할 수 있습니다.
    ()          - 그룹 짓기
    ! ~ -               - 단일 연산자
    * / %               -  산술 연산자
    + -                 - 산술 연산자
    << >>               - 논리 이동
                       - 비트단위 and
    ^                   - 비트단위 상호 배제 or
    |                   - 비트단위 or
    = *= /= %= += -=    - 할당
      &= ^= |= <<= >>=
    ,                   - 식 구분 기호

다음과 같은 미리 정의된 동적변수를 포함하여 원하는 문자열을 변수로 할당할 수 있습니다.
%CD% - 현재 디렉터리 문자열로 확장합니다.

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

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

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

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

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

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

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

SET을 이용한 날짜 문자열을 만드는 소스에서 DATE 변수를 활용하여 현재의 날짜 문자열에서 년, 월, 일 부분을 추출합니다. "~" 표현식을 이용하여, 원하는 부분의 문자열만 추출합니다. "%DATE:~0,4%"의 의미는 첫 번째 문자로부터 4개의 문자를 추출한다는 의미입니다. 즉, "2012"가 됩니다. 따라서 "%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%"게 하면 yyyymmdd의 형태인 "20120417"이 만들어지게 됩니다.

참고자료