윈 도 우 배치파일로 원하는 날짜 포멧 조합하기
2022.02.17 13:36
2022-02-19 16:40 - 아래쪽에 수정, 보충합니다.^^
2022-02-21 13:10 - 하단에 doff.exe 외부 유틸 추가합니다.
안녕하세요?
히이이잌님의 게시물 https://windowsforum.kr/lecture/17551740 을 보고 아이디어가 떠올라서... 히이이잌님 감사합니다.^^
이렇게 저렇게 검토해보니 비록 레지스트리에 쓰기를 하지만 히이이잌님 방법이 훌륭하다는 결론입니다.
제어판 날짜 형식 설정; 순서등을 바꾸면 다양한 형태로 표시될 수 있습니다.
각 PC에서 윈도우 날짜 설정에 따라서 %DATE% 출력 값이 상이하여 배치파일로 일정한 형태의 날짜를 구하기가 어렵습니다.
(영어, 한글 윈도우에 따라 날짜 표현 정의-레지스트리-가 다르기도 합니다.)
외부 명령어 wsh, powershell, wmic 들을 이용하여 구하는 방법이 있겠지만 PE에서 외부툴이 없는 경우 등을 생각하여 배치파일로만...
- 외부툴 이용 참고; https://stackoverflow.com/questions/1192476/format-date-and-time-in-a-windows-batch-script
HKCU\Control Panel\International\sShortDate 키 값 형태에서 yyyy-MM-dd ddd (2022-02-17 목) 각 항목 자체를 변수로 이용하는 것입니다.
레지스트리 쓰기가 없어서 관리자 권한을 요구하지 않습니다.
1. FormatDate2.cmd
@echo off&setlocal enabledelayedexpansion
for /f "tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v "sShortDate"') do set $sS=%%b
set $sS=!$sS:/= !& set $sS=!$sS:-= !& set $dD=!DATE:/= !& set $dD=!$dD:-= !
for %%a in (%$sS%) do set /a i+=1&set $i!i!=%%a
for %%a in (%$dD%) do set /a j+=1&call set %%$i!j!%%=%%a
if defined yyyy (set $y=%yyyy%) else if defined yy set $y=%yy%
if defined mm (set $m=%mm%) else if defined m set $m=%m%
if defined dd (set $d=%dd%) else if defined d set $d=%d%
if defined ddd (set $w=%ddd%) else if defined dddd set $w=%dddd%
echo %$y%-%$m%-%$d%-%$w%
echo %$y%.%$m%.%$d%.[%$w%]
pause
최종 변수 $y $m $d $w 를 modify 하면 원하는 결과를 얻을 수 있습니다.
레지스트리 sShortDate 값에 알파벳, -, /, (스페이스) 정도만 있다고 생각하여 만들어서 특별한 기호 등이 있을때는 수정이 필요할 것 같습니다.
혹시 자주 사용하는 형태에서 에러가 발생하면 댓글에 알려주시면 적용해보겠습니다.
출력형태는 원하시는 형태로 수정하실 수 있습니다.
예를 들면, yy 형태인데 2022 형태로 출력을 고정하고 싶을 때 후반부에 set $y=20!$y!& set $y=!$y:~-4! 정도를 추가할 수 있겠습니다.
점심 시간에 궁금하여 탐구 목적으로 해봤습니다. 아직 식사 전이라 이만 줄이고, 댓글 등을 보고 필요하면 더 추가하겠습니다.
즐거운 하루 되십시오.~
검색해보니 오래전부터 문제거리였나 봅니다. 다양한 방법이 잘 정리된 링크입니다.
- https://ss64.com/nt/syntax-getdate.html
각 나라마나 날짜를 표기하는 형태가 다양하네요. https://ss64.com/nt/date.html
- 요약하면, 0123456789-/. 조합으로 표현하고 요일이 추가되기도 합니다.
영어 윈도우에서는 M/d/yy 로 설정되어 있어도 Sat 02/19/2022 로 출력이되고 (영어 PE에서)
러시아 윈도우에서는 dd/MM/yyyy 로 되어 있고 19.02.2022 로 출력됩니다.
한글 윈도우에서는 yyyy-MM-dd 로 되어 있고 2022-02-19 로 출력됩니다.
- 영어에서 레지스트리 형태와 다르게 출력되는 것이 문제네요.
- 또 추가 문자들을 사용하면 위 방법으로 문제됩니다. 예) yyyy-MM-dd '['ddd']'
일반적인 경우에 좀 더 문제가 발생하지 않도록 개선하였습니다.
@echo off&setlocal enabledelayedexpansion
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v "sShortDate"') do call :strTrim "%%b" _sS
set _sS=!_sS:-= !& set _sS=!_sS:/= !& set _sS=!_sS:.= !& set _dD=!DATE:-= !& set _dD=!_dD:/= !& set _dD=!_dD:.= !
if "%_sS:ddd=%"=="%_sS%" if %_dD:~0,1% gtr 9 set _sS=ddd %_sS%
for %%a in (%_sS%) do set /a i+=1&set _i!i!=%%a
for %%a in (%_dD%) do set /a j+=1&call set %%_i!j!%%=%%a
if defined yy (set _y=%yy%) else set _y=%yyyy%
if defined mm (set _m=%mm%) else set _m=%m%
if defined dd (set _d=%dd%) else set _d=%d%
if defined ddd (set _w=%ddd%) else set _w=%dddd%
echo %_y%-%_m%-%_d%-%_w%
echo %_y%.%_m%.%_d%.[%_w%]
endlocal & pause & exit /b
:strTrim
setlocal enabledelayedexpansion
set "_val=yMd-/. " & set "_str=%~1"
:strTrim_Loop
set "_s1=!_str:~%i%,1!"
if not "!_s1!"=="" (if not "!_val:%_s1%=!"=="%_val%" set _valid=!_valid!%_s1%) & set /a i+=1 & goto :strTrim_Loop
endlocal & set %2=%_valid%
goto :eof
영어 윈도우에서 테스트
러시아 윈도우에서 테스트
한글 윈도우에서 테스트
배치파일 스크립트 간단하게 설명
for /f "skip=2 tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v "sShortDate"') do call :strTrim "%%b" _sS
- 레지스트리에서 sShortDate 값을 불러와서 필요한 "yMd-/. " 문자만 남기고 제거 (:strTrim 함수)
set _sS=!_sS:-= !& set _sS=!_sS:/= !& set _sS=!_sS:.= !& set _dD=!DATE:-= !& set _dD=!_dD:/= !& set _dD=!_dD:.= !
- 구분자 "-/."를 공백으로 변환
if "%_sS:ddd=%"=="%_sS%" if %_dD:~0,1% gtr 9 set _sS=ddd %_sS%
- 영어 윈도우 ddd, dddd 포맷이 없을때 요일 표시되는 것 고려
for %%a in (%_sS%) do set /a i+=1&set _i!i!=%%a
for %%a in (%_dD%) do set /a j+=1&call set %%_i!j!%%=%%a
- 레지스트리 각 항목(변수로 사용)과 날짜 출력 각 항목(값으로 사용) 매치시키기
if defined ~~~
- _y _m _d _w 변수에 년 월 일 요일 할당
먼저 올린 내용에 부족한 점이 있어서 보충하였습니다. 즐거운 주말되시길 바랍니다. -꾸~벅-
내부 명령어로만 해결하는 것이 목적이라서 올리지 않았는데 필요하신 분 계실까봐 추가합니다.
3. doff.exe cmd용 외부 유틸
- https://ss64.com/nt/syntax-getdate.html 아래쪽에 위치합니다.
(사용예) 도움말은 doff.exe -h
d:\>doff.exe
20220221131237
d:\>doff yy-mm-dd
22-02-21
d:\>doff mm/dd/yyyy
02/21/2022
@echo off
for /f "tokens=1-3 delims=/ " %%a in ('doff mm/dd/yyyy -1') do (
set mm=%%a
set dd=%%b
set yyyy=%%c)
rename httpd-access.log httpd-access-%yyyy%%mm%%dd%.log
댓글 [6]
-
cungice 2022.02.17 13:50
-
슈머슈마 2022.02.17 22:32
수고하셨습니다. -
할많하않 2022.02.17 22:39
이걸로...컴터 날짜 앞으로 뒤로 잠시 돌리고 다시 원래대로 할수도 있나요.;
-
지후빠 2022.02.18 10:13
한글 윈도우에서는 날짜 포멧을 2022-02-18 형태인 것 같습니다.
다음처럼 하시면 될 것 같습니다. (관리자 권한으로 실행)
@echo off&setlocal enabledelayedexpansion
for /f "tokens=2*" %%a in ('reg query "HKCU\Control Panel\International" /v "sShortDate"') do set $sS=%%b
set $sS=!$sS:/= !& set $sS=!$sS:-= !& set $dD=!DATE:/= !& set $dD=!$dD:-= !
for %%a in (%$sS%) do set /a i+=1&set $i!i!=%%a
for %%a in (%$dD%) do set /a j+=1&call set %%$i!j!%%=%%a
if defined yyyy (set $y=%yyyy%) else if defined yy set $y=%yy%
if defined mm (set $m=%mm%) else if defined m set $m=%m%
if defined dd (set $d=%dd%) else if defined d set $d=%d%
::여기부터 원하시는 작업 시작
date 2022-1-1
::여기까지 원하시는 작업 완료
date %$y%-%$m%-%$d%
pause&exit/b
-
할많하않 2022.02.18 14:58
-
지후빠 2023.06.02 07:37
for /f "tokens=2 delims==." %%# in ('wmic OS Get localdatetime /value') do set #=%%#& set dd=!#:~0,8!
번호 | 제목 | 글쓴이 | 조회 | 추천 | 등록일 |
---|---|---|---|---|---|
[공지] | 강좌 작성간 참고해주세요 | gooddew | - | - | - |
4360 | 소프트웨어| Total Commander 주요 단축키 설명 [3] | VᴇɴᴜꜱGɪ | 1007 | 11 | 07-23 |
4359 | 윈 도 우| 없이는 살 수 없는 Windows 바로 가기 키 11개 [5] | VᴇɴᴜꜱGɪ | 2965 | 31 | 07-18 |
4358 | 윈 도 우| Windows 11에서 모니터에 적합한 색 프로필을 얻는 방법 [3] | VᴇɴᴜꜱGɪ | 1500 | 2 | 07-17 |
4357 | 소프트웨어| 탐색기 컨텍스트 메뉴에 토탈커맨더에서 열기 추가 [15] | 지후빠 | 971 | 23 | 07-16 |
4356 | 윈 도 우| RunOnce 레지스트리 키(간단 메뉴얼) [3] | 過客 | 924 | 14 | 07-16 |
4355 | 소프트웨어| GPT 파티션 삭제 및 재구성 / EASEUS Partition Master 16 [9] | 무월 | 1511 | 29 | 07-14 |
4354 | 소프트웨어| iVentoy 만능윈도우(WIM) 자동 설치 [20] | 무월 | 4250 | 66 | 07-08 |
4353 | 소프트웨어| iVentoy PXE 부팅 네트워크 OS 설치 [25] | 무월 | 1722 | 39 | 07-02 |
4352 | 기 타| 배치 파일 %~1 [13] | bangul | 1611 | 14 | 07-02 |
4351 | 윈 도 우| Microsoft Edge 브라우저 제거 [23] | 무월 | 2400 | 36 | 06-30 |
4350 | 모 바 일| 동영상을 원 속에 넣어 합성하는 방법 Mobile PowerDirect... [1] | 무림거사 | 1004 | 2 | 06-29 |
4349 | 윈 도 우| 윈도우11,10 MS계정 없이 로컬 계정으로 설치하기 [31] | 무월 | 3895 | 33 | 06-23 |
4348 | 윈 도 우| 윈도 에러 생길때, 모든 이벤트 로그 한꺼번에 보기 [10] |
|
1265 | 10 | 06-23 |
4347 | 윈 도 우| OneDrive 설치 방지, Microsft Edge 바로가기 생성 방지 [3] | 무월 | 1040 | 11 | 06-23 |
4346 | 윈 도 우| 윈도우10 & 11 작업표시줄 시계에 요일 나오게 하는 방법! [28] | 무월 | 2388 | 33 | 06-21 |
4345 | 윈 도 우| 한글 자음 모음 분리 현상 해결 방법 [7] | 무월 | 1314 | 14 | 06-21 |
4344 | 기 타| 레마클로님 wifi on/off 스크립트 (수정) pnputil 추가 [10] | 슈머슈마 | 889 | 7 | 06-20 |
4343 | 윈 도 우| 윈도우11 네트워크 인터넷 연결 없이 설치하기 [6] | 무월 | 2321 | 16 | 06-20 |
4342 | 윈 도 우| 파워쉘로 움직이는 .gif 바로 만들기 [6] |
|
992 | 10 | 06-18 |
4341 | 기 타| Windows 10 pe 디스플레이 레지스트리 [4] | bangul | 1528 | 16 | 06-13 |
수고 많으셨습니다. 감사합니다.