Esta é a construção usual, acredito:
for /F %i in ('time /t') do set current_time=%i
(como de costume, os sinais de porcentagem precisam ser duplicados em um script de comando).
Outra construção, embora desajeitada:
time /t > tempfile.txt
set /p current_time= < tempfile.txt
Parece não haver maneira de evitar o arquivo temporário; Se você usar um pipe, o comando set acontecerá em um subprocesso. (Em algumas situações, você pode canalizar a saída para uma segunda cópia do seu script em lote, mas esse tipo de coisa pode ficar feio rápido.)
Adicional
Para expandir meu último ponto, em resposta a uma pergunta nos comentários, aqui está um exemplo de arquivo em lote que canaliza a saída para uma nova instância de si mesmo:
if "%1" NEQ "" @goto %1
:step1
time /t | %0 step2
goto :eof
:step2
set /p current_time=
echo %current_time%
rem processing here...
Eu não acho que essa solução se adapte bem a scripts em lote mais complexos.