Em situações como essa, use uma abordagem de programação simples e padrão: em vez de gastar um grande esforço na análise de uma entidade desconhecida, salve a configuração atual, redefina-a para um estado conhecido, extraia as informações e restaure o estado original. Use apenas recursos padrão do Windows.
Especificamente, os formatos de data e hora são armazenados na chave do Registro HKCU \ Painel de Controle \ Internacional \ em [valores de definição da MS] ":" "sTimeFormat" e "sShortDate". Reg é o editor de registro do console incluído em todas as versões do Windows. Privilégios elevados não são necessários para modificar a chave HKCU
Prompt $N:$D $T$G
::Save current config to a temporary (unique name) subkey, Exit if copy fails
Set DateTime=
Set ran=%Random%
Reg copy "HKCU\Control Panel\International" "HKCU\Control Panel\International-Temp%ran%" /f
If ErrorLevel 1 GoTO :EOF
::Reset the date format to your desired output format (take effect immediately)
::Resetting the time format is useless as it only affect subsequent console windows
::Reg add "HKCU\Control Panel\International" /v sTimeFormat /d "HH_mm_ss" /f
Reg add "HKCU\Control Panel\International" /v sShortDate /d "yyyy_MM_dd" /f
::Concatenate the time and (reformatted) date strings, replace any embedded blanks with zeros
Set DateTime=%date%__%time:~0,2%_%time:~3,2%_%time:~6,2%
Set DateTime=%DateTime: =0%
::Restore the original config and delete the temp subkey, Exit if restore fails
Reg copy "HKCU\Control Panel\International-Temp%ran%" "HKCU\Control Panel\International" /f
If ErrorLevel 1 GoTO :EOF
Reg delete "HKCU\Control Panel\International-Temp%ran%" /f
Simples, direto e deve funcionar para todas as regiões.
Por razões que não entendo, a redefinição do valor "sShortDate" entra em vigor imediatamente em uma janela do console, mas a redefinição do valor "sTimeFormat" muito semelhante NÃO entra em vigor até que uma nova janela do console seja aberta. No entanto, a única coisa que pode ser alterada é o delimitador - as posições dos dígitos são fixas. Da mesma forma, o token de tempo "HH" deve preceder zeros à esquerda, mas não o faz. Felizmente, as soluções alternativas são fáceis.