Trong các tình huống như thế này, hãy sử dụng một phương pháp lập trình tiêu chuẩn, đơn giản: Thay vì tốn một nỗ lực lớn để phân tích một thực thể không xác định, chỉ cần lưu cấu hình hiện tại, đặt lại về trạng thái đã biết, trích xuất thông tin và sau đó khôi phục trạng thái ban đầu. Chỉ sử dụng tài nguyên Windows tiêu chuẩn.
Cụ thể, các định dạng ngày và giờ được lưu trữ dưới khóa đăng ký HKCU \ Control Panel \ International \ in [định nghĩa MS] "giá trị": "sTimeFormat" và "sShortDate". Reg là trình chỉnh sửa sổ đăng ký giao diện điều khiển có trong tất cả các phiên bản Windows. Đặc quyền nâng cao không bắt buộc phải sửa đổi khóa 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
Đơn giản, dễ hiểu và nên làm việc cho tất cả các vùng.
Vì những lý do tôi không hiểu, việc đặt lại giá trị "sShortDate" sẽ có hiệu lực ngay lập tức trong cửa sổ bảng điều khiển nhưng đặt lại giá trị "sTimeFormat" tương tự KHÔNG có hiệu lực cho đến khi cửa sổ bảng điều khiển mới được mở. Tuy nhiên, điều duy nhất có thể thay đổi là dấu phân cách - các vị trí chữ số được cố định. Tương tự, mã thông báo thời gian "HH" được cho là để trả trước các số 0 đứng đầu nhưng không. May mắn thay, cách giải quyết là dễ dàng.