中国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计算当前日期加减日期

  Quote:
@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)  编辑帖子  回复  引用回复

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


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



论坛跳转: