윈도우 배치(Batch) 스크립트에서 날짜/시간 문자열을 구하는 방법
그동안, 배치 스크립트에서 다음과 같은 코드로 로그 파일의 접미사로 사용했는데요.
SET DATETEXT=%date:~0,4%%date:~5,2%%date:~8,2%
SET TIMETEXT=%time:~0,2%%time:~3,2%%time:~6,2%
echo %DATETEXT%_%TIMETEXT%
SET LOGFILENAME=result_%DATETEXT%_%TIMETEXT%.log
이게 좀 문제가 있군요. ^^
가령, 위의 스크립트는 날짜가 yyyy-MM-dd, 시간은 tt hh:mm과 같은 식으로 출력하도록 설정된 윈도우에서만 잘 동작합니다. 일례로 영어권 윈도우 운영체제에서는 다음과 같이 아예 엉망이 되어 버립니다.
C:\> SET DATETEXT=%date:~0,4%%date:~5,2%%date:~8,2%
C:\> SET TIMETEXT=%time:~0,2%%time:~3,2%%time:~6,2%
C:\> echo %DATETEXT%_%TIMETEXT%
10/1/218_152045
사실, 한국어 윈도우에서도 문제가 있는 것이 밤 0시인 경우에는 다음과 같은 식으로 나오기까지 합니다.
// 2018년 10월 16일 0시 16분 55초
20181016_ 01655
음... ^^; 분명히 개선이 필요하군요. 다행히 검색해 보면 다양한 해결 방법이 있습니다.
Creating a file name as a timestamp in a batch job
; https://stackoverflow.com/questions/1064557/creating-a-file-name-as-a-timestamp-in-a-batch-job/18687568
그중에서, 개인적으로 PowerShell을 이용한 해법이 가장 나아 보입니다.
REM WriteLog.bat
for /f %%i in ('powershell -c "get-date -format yyyyMMdd_HHmmss"') do set DATETIME=%%i
SET LOGFILENAME=result_%DATETIME%.log
echo %LOGFILENAME%
[출력 결과]
result_20181016_002818.log
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]