Se necesita cero inicial para el script por lotes que utiliza la variable %time%

Se necesita cero inicial para el script por lotes que utiliza la variable %time%

Encontré un error en mi script de DOS que usa datos de fecha y hora para nombrar archivos. El problema fue que terminé con un espacio porque la variable de tiempo no proporcionaba automáticamente un cero inicial para la hora <10. Entonces, ejecutar> echo %time% devuelve: ' 9:29:17.88'.

¿Alguien conoce alguna forma de rellenar condicionalmente los ceros iniciales para solucionar este problema?

Más información: El comando de configuración de mi nombre de archivo es:

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

que termina siendo: C:\Temp\robolog_20100602_ 93208.log (para las 9:23 de la mañana).

Esta pregunta está relacionada conÉste.

Gracias

Respuesta1

Una forma muy sencilla es simplemente reemplazar el espacio inicial con cero:
echo %TIME: =0%
resultados:
09:18:53,45

Respuesta2

Mi solución fue utilizar la siguiente idea:

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

Respuesta3

idea similar ala respuesta de dennis. El problema es que el ancho de %time%es siempre el mismo, por lo que inserta un espacio al principio en lugar de devolver una cadena más corta.

Puedes deshacerte de eso con for:

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

El resto es más o menos igual entonces.

Respuesta4

Para la solución más compacta que implementa todo lo anterior, creo 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

Funcionaría aquí sin agregar nuevas líneas al script. Sin embargo, quizás sea menos elegante que las soluciones de comandos múltiples.

información relacionada