批处理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