中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 求助,计算N天前的日期 上一主题 | 下一主题
a303862146
初级用户





积分 32
发帖 10
注册 2008-3-27
状态 离线
『楼 主』:  求助,计算N天前的日期

@echo off
: 1
set /p d=输入向前推的天数
set nian=%date:~0,4%
set yue=%date:~5,2%
set ri=%date:~8,2%
for %%i in (1 3 5  7 8 10 12) do (if %yue% equ %%i if %ri% gtr 31 set ri=31)
for %%i in (4 6 9 11) do (if %yue% equ %%i if %ri% gtr 30 set ri=30)
for %%i in (2) do (if %yue% equ %%i if %ri% gtr 29 set ri=29)
if %ri% leq 0 set /a %yue%-1
if %yue% leq 0 set /a %nian%-1
set c=%nian%%yue%%ri%
set /a q=%c%-%d%
echo %q%
pause
goto 1
什么地方不对?能不能帮我改下。。。谢谢

───────────────── 版务记录 ─────────────────
执行:HAT
操作:[2008-10-19]在帖子标题中增加搜索关键字
说明:原标题"求助,帮忙改下这个关于日期的批处理"不利于论坛搜索
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2008-10-19 at 23:50 ]

2008-4-23 03:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 2 楼』:  

第一:由for己经设定日数为 29-30 三数其中之一,不会是其它数了.
第二:日月不可能小于或等于0
第三:年月日三个单位不统一,怎么能放在一起计算.

2008-4-23 04:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 3 楼』:  我以前写的,你参考吧:

计算任意日期:
@echo off
:begin
cls&set /p var=输入要计算的日期(格式为2000-01-01):
if "%var:~4,1%%var:~7,1%"=="--" goto run
cls&echo 输入格式不正确!请返回正确输入。&ping /n 2 127.1>nul&goto begin
:run
set year=%var:~,4%
set /a month=100%var:~5,2%%%100,str=%year%%%4
if %month% gtr 2 (
   if %str% equ 0 (
                  set /a number+=29
   ) else (
          set /a number+=28
          )
)
set /a month-=1
if %month% gtr 0 for /l %%i in (1,1,%month%) do call :lp %%i
set /a number+=100%var:~8,2%%%100
cls&echo %var%是%year%年的第%number%天&set number=0
pause>nul&goto begin
:lp
for %%i in (1,3,5,7,8,10) do if %%i equ %1 set /a number+=31
for %%i in (4,6,9,11) do if %%i equ %1 set /a number+=30




批处理之家新域名:www.bathome.net
2008-4-23 10:59
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
terse
银牌会员





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

@echo off
set p1=%date:~0,4%
set p2=%date:~5,2%
set p3=%date:~8,2%
:tm
for /l %%a in (1,1,3) do for /f "delims=0 tokens=*" %%i in ("%p%%a%") do set p%%a=%%i
set/a pn="!(p1%%4) & !(!(p1%%100)) | !(p1%%400)"
for /f "tokens=%p2%" %%i in ("0 31 59 90 120 151 181 212  243 273 304 334") do set/a n=%%i+p3
if %P2% gtr 2 set/a n+=pn
if %P2% equ 2 if %P3% equ 29 if %pn% equ 0 echo %p1%年不是闰年 所以%P2%月不会有%P3%日&pause&goto end
echo.
echo            %p2%月%p3%日 是 %p1% 年的第 %n% 天&set p1=
echo.
echo.           输入日期查询任意天
echo.
:end
set/p p1=输入年(格式2008):
set/p p2=输入月(格式1:
set/p p3=输入日(格式1):
if "%p1%"=="" goto exit
goto tm



简单!简单!再简单!
2008-4-23 11:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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


@echo off&color 0b
:st
cls
SET/p TT=你想知道多少天前的日期?
if "%tt%" =="" echo 天数不能为空&pause&goto st
echo %tt%|findstr "^[1-9][0-9]*$">nul&&goto ys||echo 天数只能是1-9&pause&goto st
:ys
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
)
if %p3% gtr %TT% goto ppp
:nxt
set/a p2-=1
if %p2% equ 0 set/a p1-=1&&set p2=12
SET/a PN1=%p1%%%4
set PN2=28
if %PN1% EQU 0 set pN2=29
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 yy=%p1%
set m=%p2%
if %m% leq 2 (set/a yy=%yy%-1& set /a m+=12)
set /a w=(%p3%+2*%m%+3*(%m%+1)/5+%yy%+%yy%/4-%yy%/100+%yy%/400)%%7+1
set xq= 一二三四五六日
set xq=星期!xq:~%w%,1!
set p2=0%p2%
set p2=%p2:~-2,2%
set p3=0%p3%
set p3=%p3:~-2,2%
echo 你查询的是%p1%年%p2%月%p3%日 %xq%
pause
[ Last edited by terse on 2008-4-23 at 11:11 AM ]



简单!简单!再简单!
2008-4-23 11:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: