Нужен начальный ноль для пакетного скрипта, использующего переменную %time%

Нужен начальный ноль для пакетного скрипта, использующего переменную %time%

Я наткнулся на ошибку в моем скрипте DOS, который использует данные даты и времени для именования файлов. Проблема была в том, что я получил пробел, потому что переменная времени автоматически не предоставляла начальный ноль для часа < 10. Поэтому запуск> echo %time% возвращает: ' 9:29:17.88'.

Кто-нибудь знает способ условного дополнения начальных нулей, чтобы исправить это?

Дополнительная информация: Моя команда для установки имени файла:

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

Очень простой способ — просто заменить начальный пробел нулем:
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 "ТОКЕНЫ=1-4 РАЗДЕЛИТЕЛИ=/ " %%A IN ("%ДАТА%") DO FOR /F "ТОКЕНЫ=1-3 РАЗДЕЛИТЕЛИ=:." %%E IN ("%ВРЕМЯ: =0%") DO SET logfile=C:\Temp\robolog_%%D%%C%%B_%%E%%F%%G.log

будет работать здесь без добавления новых строк в скрипт. Это, возможно, менее элегантно, чем решения с несколькими командами, хотя..

Связанный контент