acho que isso melhora o @Nick Rogers em responder um pouco.
EX: com o alemão localize (de_DE) há um espaço em branco líder em horas abaixo de 10.
também queria um zero à frente na hora.
"echo -! ^ _ hh! -" dá "09" em vez de apenas "9"
então eu quebro o código em duas partes para melhor leitura.
este exemplo deve corresponder a mais localidades.
+ bônus: _ms = milissegundos ou quaisquer que sejam os dois últimos dígitos (-;
observação: às vezes a hora precisa ser escapada, veja dentro do código
SETLOCAL
SETLOCAL EnableExtensions
SETLOCAL EnableDelayedExpansion
@ECHO ON
@rem use FOR /F to 'break out' the components of %DATE% and %TIME%, assuming 'yyyy/mm/dd' format date i.e.
@rem works also with german standard format dd.mm.yyyy
echo ----- date -----
echo _%date%_
for /F "tokens=1-3 delims=.-/" %%i IN ("%date%") DO Set "_Y=%%i"& Set "_M=%%j"& Set "_D=%%k"
@rem Switch the year and day if appropriate
IF "xx%_D:~2%" == "xx" Set "_Y=%_D%"& Set "_D=%_Y%"
set __date=%_Y%%_M%%_D%
echo _%__date%_
echo ----- date -----
echo ----- time -----
echo _%time%_
for /F "tokens=1-4 delims=:," %%l IN ("%time%") DO Set "_tmp_hh=%%l"& Set "_mm=%%m"& Set "_ss=%%n"& Set "_ms=%%o"
@rem add leading zero to hour if necessary
if %_tmp_hh% LSS 10 (set _hh=^0%_tmp_hh:~1,1%) ELSE (set _hh=%time:~0,2%)
@rem sometimes the HOUR needs to be escaped, like this
echo - !^_hh! -
set __time=%_hh%%_mm%%_ss%%_ms%
echo _%__time%_
echo ----- time -----
Set fullTime=%_Y%%_M%%_D%-%_hh%%_mm%%_ss%%_ms%
echo _%fullTime%_
pause
saídas: echo fullTime = 15062018-10182821