Хотя это можно сделать в одну строку (требуется отложенное расширение ), я не думаю, что оно служит удобочитаемости:
@echo off
setlocal enabledelayedexpansion
set "var=%time:~0,8%" & set "var=!var::=_!"
echo %var%
Я предлагаю перенести форматирование вподпрограмма.(Не совсем однострочный, но ваш основной код остается чистым и читабельным).
@echo off
call :FormatTime var="%time%"
echo %var%
goto :eof
:FormatTime
set "_=%~2"
set "_=%_:~0,8%" :: get 'HH:MM:SS'
set "_=%_: =0%" :: replace ' ' with '0'
set "%1=%_::=_%" :: replace ':' with '_'
goto :eof
call
определяет имя переменной для результата (var
здесь) и строку для форматирования (%time%
здесь).Обычно два аргумента разделяются пробелом, но поскольку =
также действует как стандартный разделитель, мы можем использовать его, чтобы сделать строку еще более читаемой (интуитивно понятной).
Заключение строки в кавычки ("%time%
) позволяет нам поймать пробел (" 8:12:00,99"
), чтобы иметь возможность заменить его на ноль.
Я также использовал другой метод для удаления части миллисекунд (не зависит от языка).