%time% 변수를 사용하는 배치 스크립트에는 앞에 0이 필요합니다.

%time% 변수를 사용하는 배치 스크립트에는 앞에 0이 필요합니다.

파일 이름 지정에 날짜 및 시간 데이터를 사용하는 DOS 스크립트에서 버그를 발견했습니다. 문제는 시간 변수가 시간 < 10에 대해 선행 0을 자동으로 제공하지 않았기 때문에 공백이 생겼다는 것입니다. 따라서 실행> echo %time% 은 '9:29:17.88'을 반환합니다.

이 문제를 해결하기 위해 선행 0을 조건부로 채우는 방법을 아는 사람이 있습니까?

추가 정보: 내 파일 이름 설정 명령은 다음과 같습니다.

set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log

결과는 다음과 같습니다: C:\Temp\robolog_20100602_ 93208.log(오전 9시 23분).

이 질문은 다음과 관련이 있습니다.이 하나.

감사해요

답변1

매우 간단한 방법은 선행 공백을 0으로 바꾸는 것입니다.
echo %TIME: =0%
출력:
09:18:53,45

답변2

내 솔루션은 다음 아이디어를 사용하는 것입니다.

SET HOUR=%TIME:~0,2%
IF "%HOUR:~0,1%" == " " SET HOUR=0%HOUR:~1,1%

답변3

와 비슷한 생각데니스의 대답. 문제는 너비가 %time%항상 동일하므로 더 짧은 문자열을 반환하는 대신 시작 부분에 공백을 삽입한다는 것입니다.

다음을 사용하여 이를 제거할 수 있습니다 for.

for /f "delims= " %x in ("%time%") do set T=0%x

그렇다면 나머지는 거의 같습니다.

답변4

위의 모든 것을 구현하는 가장 컴팩트한 솔루션의 경우

FOR /F "TOKENS=1-4 DELIMS=/ " %%A IN ("%DATE%") DO FOR /F "TOKENS=1-3 DELIMS=:." %%E IN ("%TIME: =0%") DO SET 로그 파일=C:\Temp\robolog_%%D%%C%%B_%%E%%F%%G.log

스크립트에 새 줄을 추가하지 않고도 여기에서 작동합니다. 하지만 다중 명령 솔루션보다 덜 우아할 수도 있습니다.

관련 정보