Precisa de zero à esquerda para script em lote usando a variável% time%

Precisa de zero à esquerda para script em lote usando a variável% time%

Me deparei com um bug no meu script DOS que usa dados de data e hora para nomear arquivos. O problema é que acabei com uma lacuna porque a variável time não forneceu automaticamente zero à esquerda para hora <10. Portanto, executar> echo %time% retorna: ' 9:29:17.88'.

Alguém sabe uma maneira de preencher condicionalmente os zeros à esquerda para corrigir isso?

Mais informações: Meu comando set de nome de arquivo é:

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

que acaba sendo: C:\Temp\robolog_20100602_ 93208.log (para 9h23 da manhã).

Esta questão está relacionadaEste.

Obrigado

Responder1

Uma maneira muito simples é simplesmente substituir o espaço inicial por zero:
echo %TIME: =0%
saídas:
09:18:53,45

Responder2

Minha solução foi usar a seguinte ideia:

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

Responder3

Idéia semelhante aResposta de Dennis. O problema é que a largura do %time%é sempre a mesma, então ele insere um espaço no início ao invés de retornar uma string mais curta.

Você pode se livrar disso com for:

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

O resto é mais ou menos igual, então.

Responder4

Para a solução mais compacta que implementa tudo acima, acho que

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

funcionaria aqui sem adicionar novas linhas ao script. Talvez seja menos elegante do que várias soluções de comando.

informação relacionada