इस तरह की स्थितियों में एक सरल, मानक प्रोग्रामिंग दृष्टिकोण का उपयोग करें: एक अज्ञात इकाई को पार्स करने के विशाल प्रयास के बजाय, बस वर्तमान कॉन्फ़िगरेशन को सहेजें, इसे एक ज्ञात स्थिति में रीसेट करें, जानकारी निकालें और फिर मूल स्थिति को पुनर्स्थापित करें। केवल मानक विंडोज संसाधनों का उपयोग करें।
विशेष रूप से, दिनांक और समय प्रारूप रजिस्ट्री कुंजी HKCU \ Control Panel \ International \ [MS परिभाषा] "मान": "sTimeFormat" और "sShortDate" में संग्रहीत किए जाते हैं। Reg सभी विंडोज संस्करणों के साथ शामिल कंसोल रजिस्ट्री संपादक है। उन्नत विशेषाधिकार 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
सरल, सीधा और सभी क्षेत्रों के लिए काम करना चाहिए।
जिन कारणों से मुझे समझ में नहीं आ रहा है, "sShortDate" मान को रीसेट करना तुरंत कंसोल विंडो में प्रभावी होता है, लेकिन बहुत समान "sTimeFormat" मान को रीसेट करने से नई कंसोल विंडो खुलने तक प्रभावी नहीं होता है। हालाँकि, केवल एक चीज परिवर्तनशील होती है - अंकों की स्थिति तय हो जाती है। "HH" टाइम टोकन को अग्रणी शून्य मानने के लिए माना जाता है, लेकिन ऐसा नहीं होता है। सौभाग्य से, workarounds आसान हैं।