Windows (Windows XP) 배치 스크립트에서 파일 이름 등에 나중에 사용하기 위해 현재 날짜와 시간을 포맷해야합니다.
스택 오버플로 질문 배치 파일에 날짜를 추가하는 방법 과 비슷 하지만 시간도 있습니다.
나는 지금까지 이것을 가지고있다 :
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
이것은 다음을 제공합니다.
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
한 자리 시간을 % TIME % 단위로 허용 할 수있는 방법이 있습니까? 따라서 다음을 얻을 수 있습니까?
2009_07_28__08_36_01
답변
나는이 스크립트로 끝났다.
set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
echo secs=%secs%
set year=%date:~-4%
echo year=%year%
:: WIN2008R2에서 예를 들어 ‘set month = % date : ~ 3,2 %’를 아래와 같이 만들어야했습니다.
set month=%date:~4,2%
if "%month:~0,1%" == " " set month=0%month:~1,1%
echo month=%month%
set day=%date:~0,2%
if "%day:~0,1%" == " " set day=0%day:~1,1%
echo day=%day%
set datetimef=%year%%month%%day%_%hour%%min%%secs%
echo datetimef=%datetimef%
답변
@ECHO OFF
: Sets the proper date and time stamp with 24Hr Time for log file naming
: convention
SET HOUR=%time:~0,2%
SET dtStamp9=%date:~-4%%date:~4,2%%date:~7,2%_0%time:~1,1%%time:~3,2%%time:~6,2%
SET dtStamp24=%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%
if "%HOUR:~0,1%" == " " (SET dtStamp=%dtStamp9%) else (SET dtStamp=%dtStamp24%)
ECHO %dtStamp%
PAUSE
답변
다음은 로그 파일 이름을 생성하는 방법입니다 ( http://ss64.com/nt/syntax-getdate.html 기반 ).
@ECHO OFF
:: Check WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error
:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
IF "%%~L"=="" goto s_done
Set _yyyy=%%L
Set _mm=00%%J
Set _dd=00%%G
Set _hour=00%%H
SET _minute=00%%I
SET _second=00%%K
)
:s_done
:: Pad digits with leading zeros
Set _mm=%_mm:~-2%
Set _dd=%_dd:~-2%
Set _hour=%_hour:~-2%
Set _minute=%_minute:~-2%
Set _second=%_second:~-2%
Set logtimestamp=%_yyyy%-%_mm%-%_dd%_%_hour%_%_minute%_%_second%
goto make_dump
:s_error
echo WMIC is not available, using default log filename
Set logtimestamp=_
:make_dump
set FILENAME=database_dump_%logtimestamp%.sql
...
답변
나는 보통 날짜 / 시간 문자열이 필요할 때마다 이렇게한다 :
set dt=%DATE:~6,4%_%DATE:~3,2%_%DATE:~0,2%__%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
set dt=%dt: =0%
독일 날짜 / 시간 형식입니다 (dd.mm.yyyy hh : mm : ss). 기본적으로 하위 문자열을 연결하고 마지막으로 모든 공백을 0으로 바꿉니다.
부분 문자열의 작동 방식에 대한 간단한 설명 :
%VARIABLE:~num_chars_to_skip,num_chars_to_keep%
따라서 “29.03.2018”과 같은 날짜에서 연도를 얻으려면 다음을 사용하십시오.
%DATE:~6,4%
^-----skip 6 characters
^---keep 4 characters
답변
PowerShell이 설치되어 있으면 원하는 형식으로 날짜 / 시간을 쉽고 안정적으로 얻을 수 있습니다. 예를 들면 다음과 같습니다.
for /f %%a in ('powershell -Command "Get-Date -format yyyy_MM_dd__HH_mm_ss"') do set datetime=%%a
move "%oldfile%" "backup-%datetime%"
물론 오늘날 PowerShell은 항상 설치되지만 Windows XP에서는 PS를 사용할 수있는 알려진 환경에서 배치 스크립트를 사용하는 경우에만이 기술을 사용하려고합니다 (또는 PowerShell을 사용할 수있는 경우 배치 파일에서 확인). …)
PowerShell을 사용하여 날짜 / 시간을 얻을 수 있다면 배치 파일을 사용하는 이유는 무엇입니까?하지만 몇 가지 명백한 이유는 다음과 같습니다. 배치 파일을 사용하여 구식 방식을 사용하거나 (b) 기존 스크립트를 업데이트하고 모든 것을 PS로 포팅하고 싶지 않습니다.
답변
나는 오늘이 문제를 겪고 그것을 해결했다.
SET LOGTIME=%TIME: =0%
공백을 0으로 바꾸고 기본적으로 시간이 0 인 패드입니다.
빠른 검색 후 명령 확장이 필요한지 찾지 못했습니다 (여전히 SETLOCAL DISABLEEXTENSIONS와 함께 작동).
답변
언급했듯이 날짜 및 시간을 구문 분석하는 것은 현재 사용자가 사용중인 형식 (예 : MM / dd / yy 또는 dd-MM-yyyy)을 알고있는 경우에만 유용합니다. 이것은 결정할 수 있지만 모든 스트레스와 구문 분석을 수행 할 때 예상치 못한 형식이 사용되는 상황이 발생할 수 있으며 더 많은 조정이 필요합니다.
원하는 형식으로 날짜 슬러그를 반환하는 외부 프로그램을 사용할 수도 있지만 스크립트 / 배치와 함께 유틸리티 프로그램을 배포해야하는 단점이 있습니다.
꽤 원시적 인 방식으로 CMOS 클럭을 사용하는 배치 트릭도 있지만 대부분의 사람들이 베어 전선에 너무 가까우며 항상 날짜 / 시간을 검색하는 데 선호되는 장소는 아닙니다.
아래는 위의 문제를 피하는 솔루션입니다. 그렇습니다. 다른 문제가 있지만 내 목적으로 현대 Windows 시스템의 .bat 파일에 날짜 스탬프를 만드는 가장 쉽고 명확하며 이식성이 뛰어난 솔루션이라는 것을 알았습니다. 이것은 단지 예일 뿐이지 만 다른 날짜 및 / 또는 시간 형식 등을 수정하는 방법을 보게 될 것입니다.
reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp" /f
reg add "HKCU\Control Panel\International" /v sShortDate /d "yyMMdd" /f
@REM reg query "HKCU\Control Panel\International" /v sShortDate
set LogDate=%date%
reg copy "HKCU\Control Panel\International-Temp" "HKCU\Control Panel\International" /f