中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请教如何在WIN2000下提取前一天日期(已结)
作者:
标题: 请教如何在WIN2000下提取前一天日期(已结) 上一主题 | 下一主题
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『楼 主』:  请教如何在WIN2000下提取前一天日期(已结)

这个是在XP下能通过,但是WIN2000下就不行了,请高手指点该如何修改 @echo off FOR /F "TOKENS=1-3 DELIMS=- " %%A IN ('echo %DATE%') do (set Year=%%A&SET Month=%%B&SET Day=%%C) FOR %%A IN (%Year%) DO SET Year=%%A FOR %%A IN (%Month%) DO SET Month=%%A FOR %%A IN (%Day%) DO SET Day=%%A SET SortDate=%Year%%Month%%Day% FOR %%A IN (%Date%) DO SET Today=%%A SET DayS=%Day% IF %DayS% EQU 1 ( SET YesterY=%Year% CALL :RollMonth ) ELSE ( SET /A YesterD=%DayS% - 1 SET YesterM=%Month% SET YesterY=%Year% ) IF %YesterD% LSS 10 SET YesterD=0%YesterD% SET SortYest=%YesterY%-%YesterM%-%YesterD% CALL ECHO %SortYest% ENDLOCAL pause GOTO:EOF :RollMonth IF %Month%==01 ( SET YesterD=31 SET YesterM=12 SET /A YesterY = %Year% - 1 ) IF %Month%==02 ( SET YesterD=31 SET YesterM=01 ) IF %Month%==03 ( SET YesterD=28 SET YesterM=02 CALL :LeapYear ) IF %Month%==04 ( SET YesterD=31 SET YesterM=03 ) IF %Month%==05 ( SET YesterD=30 SET YesterM=04 ) IF %Month%==06 ( SET YesterD=31 SET YesterM=05 ) IF %Month%==07 ( SET YesterD=30 SET YesterM=06 ) IF %Month%==08 ( SET YesterD=31 SET YesterM=07 ) IF %Month%==09 ( SET YesterD=31 SET YesterM=08 ) IF %Month%==10 ( SET YesterD=30 SET YesterM=09 ) IF %Month%==11 ( SET YesterD=31 SET YesterM=10 ) IF %Month%==12 ( SET YesterD=30 SET YesterM=11 ) GOTO:EOF :LeapYear SET /A mod400 = %Year% %% 400 SET /A mod100 = %Year% %% 100 SET /A mod4 = %Year% %% 4 IF %mod400% EQU 0 ( SET YesterD=29 ) ELSE ( IF %mod100% EQU 0 ( SET YesterD=28 ) ELSE ( IF %mod4% EQU 0 ( SET YesterD=29 ) ELSE ( SET YesterD=28 ) ) ) GOTO:EOF :Syntax ECHO PREV: Get yesterday echo %SortYest% [ Last edited by fzp1978321 on 2008-3-6 at 02:14 PM ]


2008-3-6 12:11
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  

直接调用VBS里面的date()-1可以吗?


2008-3-6 12:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 3 楼』:  

恩,可以,只要能实现就行


2008-3-6 12:33
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 4 楼』:  

参考一个 不知道2000下怎么样 @echo off set p1=%date:~0,4% set p2=%date:~5,2% set p3=%date:~8,2% setlocal enabledelayedexpansion for /l %%a in (1,1,3) do ( for /f "delims=0 tokens=*" %%i in ("!p%%a!") do set p%%a=%%i ) SET TT=1 if %p3% gtr %TT% goto ppp :nxt set/a p2-=1 if %p2% equ 0 set/a p1-=1&&set p2=12 set/a PN2="^!(p1%%4) & ^!(^!(p1%%100)) | ^!(p1%%400)",PN2=28+PN2 for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i if %p3% leq %tt% goto nxt :ppp set/a p3=%p3%-%tt% set p2=0%p2% set p2=%p2:~-2,2% set p3=0%p3% set p3=%p3:~-2,2% echo %p1%-%p2%-%p3% pause [ Last edited by terse on 2008-3-6 at 12:43 PM ]




简单!简单!再简单!
2008-3-6 12:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 5 楼』:  

@echo off
>"%tmp%\Yesterday.vbs" echo dt=date()-1
>>"%tmp%\Yesterday.vbs" echo wscript.echo dt
for /f %%a in ('cscript /nologo %tmp%\Yesterday.vbs') do set LastDay=%%a
echo 今天:%date%
echo 昨天:%LastDay%


2008-3-6 12:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 6 楼』:  

VBS计算当前日期加减日期
@echo off ::::备份系统原时间日期格式 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" >>aDate.reg echo "sDate"="-" >>aDate.reg echo "sTimeFormat"="HH:mm:ss" regedit /s aDate.reg&del aDate.reg :::用VBS计算当前日期减 20 天,如果要当前之后的 20 天请将 ↓下面的 -20 改成 +20 >tmp.vbs echo Wscript.echo FormatDateTime (DateAdd("d", -20 ,Date),2) for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set aDate=%%i&del tmp.vbs echo 20天前是 %aDate% ::::这里你批处理的开始 ::::还原系统原时间日期格式 regedit /s "%temp%\bak.reg"&del "%temp%\bak.reg" pause




2008-3-6 13:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 7 楼』:  

>tmp.vbs echo Wscript.echo FormatDateTime (DateAdd("d", -20 ,Date),2)
for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set aDate=%%i&del tmp.vbs
简化这样就可以了,但是兼容性不强,而6楼不存在BUG




2008-3-6 13:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fzp1978321
初级用户





积分 110
发帖 50
注册 2008-1-18
状态 离线
『第 8 楼』:  

谢谢各位,问题已经解决!


2008-3-6 14:13
查看资料  发送邮件  发短消息 网志  OICQ (195690504)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: