Это обычная конструкция, я считаю:
for /F %i in ('time /t') do set current_time=%i
(как обычно, знаки процента должны быть удвоены в командном сценарии.)
Еще одна конструкция, хоть и неловкая
time /t > tempfile.txt
set /p current_time= < tempfile.txt
Кажется, нет никакого способа избежать временного файла; если вы используете канал, команда set выполняется в подпроцессе. (В некоторых ситуациях вы можете передать вывод во вторую копию вашего пакетного сценария, но такие вещи могут быть ужасно быстрыми.)
дополнительный
Если говорить о моем последнем замечании, то в ответ на вопрос в комментариях приведен пример пакетного файла, который направляет вывод в новый экземпляр:
if "%1" NEQ "" @goto %1
:step1
time /t | %0 step2
goto :eof
:step2
set /p current_time=
echo %current_time%
rem processing here...
Я не думаю, что это решение хорошо масштабируется для более сложных пакетных скриптов.