En situaciones como esta, utilice un enfoque de programación simple y estándar: en lugar de gastar un gran esfuerzo en analizar una entidad desconocida, simplemente guarde la configuración actual, restablezca su estado conocido, extraiga la información y luego restaure el estado original. Use solo recursos estándar de Windows.
Específicamente, los formatos de fecha y hora se almacenan bajo la clave de registro HKCU \ Control Panel \ International \ en [valores de MS definición ":" sTimeFormat "y" sShortDate ". Reg es el editor de registro de consola incluido con todas las versiones de Windows. No se requieren privilegios elevados para modificar la clave 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
Simple, directo y debería funcionar para todas las regiones.
Por razones que no entiendo, restablecer el valor "sShortDate" tiene efecto inmediatamente en una ventana de consola, pero restablecer el valor muy similar "sTimeFormat" NO tiene efecto hasta que se abra una nueva ventana de consola. Sin embargo, lo único que se puede cambiar es el delimitador: las posiciones de los dígitos son fijas. Del mismo modo, se supone que la ficha de tiempo "HH" antepone los ceros iniciales, pero no lo hace. Afortunadamente, las soluciones son fáciles.