Board logo

标题: [讨论]批处理标准化获取当前系统日期[2008-12-16更新] [打印本页]

作者: HAT     时间: 2008-7-29 13:19    标题: [讨论]批处理标准化获取当前系统日期[2008-12-16更新]

操作系统不同,日期格式也可能不同:

星期二 2008-07-29
2008-07-29 星期二
07/29/2008 Tue
Tue 07/29/2008

再考虑到中、英之外的其它语言的操作系统,日期格式的种类实在太多了。
要想标准化地获取当前系统日期2008-07-28,直接截取%date%变量的方法是不行的。

抛砖引玉:
CODE:  [Copy to clipboard]
@echo off
rem 需要reg.exe的支持
rem 无法保证在中、英之外的其它语言的操作系统上得到正确结果
for /f "skip=4 delims= " %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do set DateFormat=%%a
set DateFormat=%DateFormat:~-8%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
set Today=%date: =%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %DateFormat% /f>nul
set "Week=Mon Tue Wed Thu Fri Sat Sun 星期一 星期二 星期三 星期四 星期五 星期六 星期日"
for %%a in (%Week%) do call set "Today=%%Today:%%a=%%"
echo %Today%
CODE:  [Copy to clipboard]
@echo off
rem 需要reg.exe的支持
for /f "skip=4 delims= " %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do set DateFormat=%%a
set DateFormat=%DateFormat:~-8%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
set Today=%date: =%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %DateFormat% /f>nul
if "%Today:~0,1%" gtr "9" (
  set Today=%Today:~-10%
) else (
  set Today=%Today:~0,10%
)
echo %Today%
CODE:  [Copy to clipboard]
@echo off
rem 需要reg.exe的支持
for /f "skip=4 delims= " %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do set DateFormat=%%a
set DateFormat=%DateFormat:~-8%
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
type nul>"%temp%\MyFile.tmp"
for /f %%a in ('dir "%temp%\MyFile.tmp" ^| findstr /i "MyFile.tmp"') do set Today=%%a
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %DateFormat% /f>nul
echo %Today%
CODE:  [Copy to clipboard]
@echo off
rem 需要WMIC的支持
for /f "tokens=2 delims==" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value') do set t=%%a
set Today=%t:~0,4%-%t:~4,2%-%t:~6,2%
echo %Today%
CODE:  [Copy to clipboard]
@echo off
rem 需要调用VBS
>"%temp%\MyDate.vbs" echo dt=date()
>>"%temp%\MyDate.vbs" echo s=right(year(dt),4) ^& "-" ^& right("0" ^& month(dt),2) ^& "-" ^& right("0" ^& day(dt),2)
>>"%temp%\MyDate.vbs" echo wscript.echo s
for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do set Today=%%a
echo %Today%
2008年8月6日更新,见10楼。
CODE:  [Copy to clipboard]
@echo off
rem 需要保证注册表编辑器没有处于锁定状态
regedit /e "%temp%\bak.reg" "HKEY_CURRENT_USER\Control Panel\International"
>aDate.reg echo REGEDIT4
>>aDate.reg echo.
>>aDate.reg echo [HKEY_CURRENT_USER\Control Panel\International]
>>aDate.reg echo "sShortDate"="yyyy-MM-dd"
regedit /s aDate.reg&&del aDate.reg
set Today=%date: =%
regedit /s "%temp%\bak.reg"&&del "%temp%\bak.reg"
if "%Today:~0,1%" gtr "9" (
  set Today=%Today:~-10%
) else (
  set Today=%Today:~0,10%
)
echo %Today%
2008年12月16日收录 s11ss 兄的 debug 方案,见18楼。
CODE:  [Copy to clipboard]
@echo off & setlocal
rem 使用debug
for /f "tokens=6,8 delims== " %%a in ('^(echo a100^&echo mov ah^,2a^&echo int 21^&echo.^&echo p 2^&echo q^)^|debug^|find "CX"') do set /a y=0x%%a&set md=%%b
set /a m=0x%md:~,2%,d=0x%md:~-2%
set m=0%m%&set d=0%d%
echo %y%-%m:~-2%-%d:~-2%
pause
[ Last edited by HAT on 2008-12-16 at 23:13 ]
作者: okzhsh01     时间: 2008-7-31 23:39    标题: help

我用的时98的系统
你的所有的我都试了
98下边调用不了这个啊
有什么办法解决码?
哪怕是升级98的DOS都行?
具体点
谢谢了
作者: lxmxn     时间: 2008-8-1 08:27


  Quote:
Originally posted by okzhsh01 at 2008-7-31 23:39:
我用的时98的系统
你的所有的我都试了
98下边调用不了这个啊
有什么办法解决码?
哪怕是升级98的DOS都行?
具体点
谢谢了

还有人在用98。。。汗一个先。。

建议升级系统。
作者: yangzhiyi     时间: 2008-8-1 13:48
用不了XP的机快换了吧
作者: s11ss     时间: 2008-8-1 20:46
来个js的:
CODE:  [Copy to clipboard]
@set @j=1 /*&set @j=&cscript/nologo /e:jscript "%~f0"&pause>nul&exit/b*/
var d=new Date()
WSH.echo(d.getYear()+'-'+AddZero(d.getMonth()+1)+'-'+AddZero(d.getDate()))
function AddZero(i)
{if(i<10) return('0'+i);else return(i);}

作者: s11ss     时间: 2008-8-2 14:04
还可以把js或vbs代码写到mshta后面,建立临时文件,用来将日期显示在cmd中。
作者: mkd     时间: 2008-8-3 11:46
CODE:  [Copy to clipboard]
set today=%date%

for /f "tokens=1-3 delims=1234567890" %%a in ("%today%") do (
        for %%i in ("%%a" "%%b" "%%c") do call set today=%%today:%%~i=%%
)

if %today:~0,2% leq 12 set today=%today:~4,4%%today:~0,4%
echo %today%
pause

作者: knoppix7     时间: 2008-8-3 22:45
记得好像可以用Debug取得时间..方法忘了.
作者: HAT     时间: 2008-8-6 00:36    标题: Re 7楼

当日期格式的顺序为日、月、年的时候,你的代码会取到错误的数据。
作者: HAT     时间: 2008-8-6 00:41
在 fastslz 兄的启发下:
CODE:  [Copy to clipboard]
@echo off
rem 需要保证注册表编辑器没有处于锁定状态
regedit /e "%temp%\bak.reg" "HKEY_CURRENT_USER\Control Panel\International"
>aDate.reg echo REGEDIT4
>>aDate.reg echo.
>>aDate.reg echo [HKEY_CURRENT_USER\Control Panel\International]
>>aDate.reg echo "sShortDate"="yyyy-MM-dd"
regedit /s aDate.reg&&del aDate.reg
set Today=%date: =%
regedit /s "%temp%\bak.reg"&&del "%temp%\bak.reg"
if "%Today:~0,1%" gtr "9" (
  set Today=%Today:~-10%
) else (
  set Today=%Today:~0,10%
)
echo %Today%

作者: HAT     时间: 2008-8-6 00:45    标题: Re 2楼

不好意思,我没有Win98的测试环境。
你可以试试10楼的代码。
作者: okzhsh01     时间: 2008-8-16 22:12
找了N久,总算找到了
先收下了,哪天过去再试下
作者: q1a2z3q1a2z3     时间: 2008-8-18 11:20
@echo off
for /f "tokens=1-3 delims=- " %%i in ("%date%") do set /p=%%i-%%j-%%k <nul
pause

[ Last edited by q1a2z3q1a2z3 on 2008-8-18 at 11:40 AM ]
作者: HAT     时间: 2008-8-18 11:28    标题: Re 13楼

仔细看看顶楼的帖子,日期的分隔符不一定是横线或者空格。
作者: q1a2z3q1a2z3     时间: 2008-8-18 11:38
hat  反映神速啊!
作者: yishanju     时间: 2008-8-18 12:42
HAT如同神一般无时不在无处不在
作者: hansom     时间: 2008-12-12 00:36


  Quote:
Originally posted by lxmxn at 2008-8-1 08:27 AM:

还有人在用98。。。汗一个先。。

建议升级系统。


作者: s11ss     时间: 2008-12-16 22:53


  Quote:
Originally posted by knoppix7 at 2008-8-3 10:45 PM:
记得好像可以用Debug取得时间..方法忘了.

CODE:  [Copy to clipboard]
@echo off & setlocal
for /f "tokens=6,8 delims== " %%a in ('^(echo a100^&echo mov ah^,2a^&echo int 21^&echo.^&echo p 2^&echo q^)^|debug^|find "CX"') do set /a y=0x%%a&set md=%%b
set /a m=0x%md:~,2%,d=0x%md:~-2%
set m=0%m%&set d=0%d%
echo %y%-%m:~-2%-%d:~-2%
pause

作者: yzdocean     时间: 2009-2-27 05:52
都是牛人大涨见识,呵呵




欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) Powered by Discuz! 2.5