批处理bat标准化获取当前系统日期的几种方法
操作系统不同,日期格式也可能不同:
星期二2008-07-29
2008-07-29星期二
07/29/2008Tue
Tue07/29/2008
再考虑到中、英之外的其它语言的操作系统,日期格式的种类实在太多了。
要想标准化地获取当前系统日期2008-07-28,直接截取%date%变量的方法是不行的。
【方案一】BAT+REG
@echooff
rem无法保证在中、英之外的其它语言的操作系统上得到正确结果
for/f"delims="%%ain('regquery"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate')do(
set"RegDateOld=%%a"
)
setRegDateOld=%RegDateOld:~-8%
regadd"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate/tREG_SZ/dyyyy-M-d/f>nul
setToday=%date:=%
regadd"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate/tREG_SZ/d%RegDateOld%/f>nul
set"Week=MonTueWedThuFriSatSun星期一星期二星期三星期四星期五星期六星期日"
for%%ain(%Week%)do(
callset"Today=%%Today:%%a=%%"
)
echo,%Today%
pause
【方案二】BAT+REG
@echooff
for/f"delims="%%ain('regquery"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate')do(
set"RegDateOld=%%a"
)
setRegDateOld=%RegDateOld:~-8%
regadd"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate/tREG_SZ/dyyyy-M-d/f>nul
setToday=%date:=%
regadd"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate/tREG_SZ/d%RegDateOld%/f>nul
if"%Today:~0,1%"gtr"9"(
setToday=%Today:~-10%
)else(
setToday=%Today:~0,10%
)
echo,%Today%
pause
【方案三】BAT+REG
@echooff
for/f"delims="%%ain('regquery"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate')do(
set"RegDateOld=%%a"
)
setRegDateOld=%RegDateOld:~-8%
regadd"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate/tREG_SZ/dyyyy-M-d/f>nul
typenul>"%temp%/MyFile.tmp"
for/f%%ain('dir"%temp%/MyFile.tmp"^|findstr/i"MyFile.tmp"')do(
setToday=%%a
)
regadd"HKEY_CURRENT_USER/ControlPanel/International"/vsShortDate/tREG_SZ/d%RegDateOld%/f>nul
echo,%Today%
pause
【方案四】BAT+WMIC
@echooff
for/f"tokens=2delims=="%%ain('wmicpathwin32_operatingsystemgetLocalDateTime/value')do(
sett=%%a
)
setToday=%t:~0,4%-%t:~4,2%-%t:~6,2%
echo,%Today%
pause
【方案五】BAT+VBS
@echooff
>"%temp%/DateCalculate.vbs"echodt=date()
>>"%temp%/DateCalculate.vbs"echos=right(year(dt),4)^&"-"^&right("0"^&month(dt),2)^&"-"^&right("0"^&day(dt),2)
>>"%temp%/DateCalculate.vbs"echowscript.echos
for/f%%ain('cscript/nologo"%temp%/DateCalculate.vbs"')doset(
Today=%%a
)
echo,%Today%
pause
【方案六】BAT+REGEDIT
@echooff rem需要保证注册表编辑器没有处于锁定状态 regedit/e"%temp%/bak.reg""HKEY_CURRENT_USER/ControlPanel/International" >"%temp%/new.reg"echoREGEDIT4 >>"%temp%/new.reg"echo, >>"%temp%/new.reg"echo[HKEY_CURRENT_USER/ControlPanel/International] >>"%temp%/new.reg"echo"sShortDate"="yyyy-MM-dd" regedit/s"%temp%/new.reg" setToday=%date:=% regedit/s"%temp%/bak.reg" if"%Today:~0,1%"gtr"9"( setToday=%Today:~-10% )else( setToday=%Today:~0,10% ) echo,%Today% pause
【方案七】BAT+DEBUG
@echooff
for/f"tokens=6,8delims=="%%ain('^(echoa100^&echomovah^,2a^&echoint21^&echo.^&echop2^&echoq^)^|debug^|find"CX"')do(
set/ay=0x%%a
setmd=%%b
)
set/am=0x%md:~,2%
set/ad=0x%md:~-2%
setm=0%m%
setd=0%d%
setToday=%y%-%m:~-2%-%d:~-2%
echo,%Today%
pause