(DOS 배치 프로그램 작성) 년/월/일 시:분:초 포맷에서 숫자 만 취득하는 방법

DOS배치파일 작성 팁

이 글에서는 DOS용 배치 프로그램에서 log파일(20211221_113259_error.log) 등을 출력할 때 파일 명의 선두에 붙여서 사용하기 위해yyyymmdd_hhmiss형식의 숫자를 취득하는 방법을 소개합니다.

%date% 특수 환경 변수

다음 명령으로 출력하는 년/월/일 (예 2021/12/21)에서 위치에 대응하는 값의 관계는 다음과 같습니다.

C:\>echo %date%
2021/12/21
위치0123456789
2021/12/21

%date% 출력 값을 기준으로 지정 위치에서 지정 자릿수 만큼의 년, 월 , 일을 취득하는 명령은 다음과 같습니다.

명령설명결과
echo %date:~0,4%위치 0부터 4 자리 (년)2021
echo %date:~5,2%위치 5부터 2 자리 (월) 12
echo %date:~8,2%위치 8부터 2 자리 (일) 21

%time% 특수 환경 변수

다음 명령으로 출력하는 시:분:초 (예 22:32:57)에서 위치에 대응하는 값의 관계는 다음과 같습니다.

C:\>echo %time%
22:32:57.35
위치012345678910
23:32:57.35

%time% 출력 값을 기준으로 지정 위치에서 지정 자릿수 만큼의 시, 분 , 초를 취득하는 명령은 다음과 같습니다.

명령설명결과
echo %time:~0,2%위치 0부터 2 자리 22
echo %time:~3,2%위치 3부터 2 자리 32
echo %time:~6,2%위치 6부터 2 자리 57

yyyymmdd_hhmiss포맷으로 출력하기

%time% 출력 값의 시간 영역은 0시부터 9시까지 한 자릿수로 출력 됩니다. 이를 염두에 두고 다음과 같이 10시 이전 출력(예: if %CUR_HH% lss 10)에 대해서는 앞에 0을 붙여서 (예: 0%time:~1,1% )두 자릿수를 만들어 출력합니다.

C:\>echo %date%
2021/12/21
C:\>echo %time%
 0:58:33.65
C:\>set CUR_HH=%time:~0,2%
C:\>if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)
C:\>echo %CUR_HH%%time:~3,2%%time:~6,2%
005833
C:\>echo %date:~0,4%%date:~5,2%%date:~8,2%_%CUR_HH%%time:~3,2%%time:~6,2%
20211221_005833
제목과 URL을 복사했습니다