[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 只用if和SET做日期推算的批处理

如题,要求输入若干天数,显示现在日期的前若干天数的日期:今天是2008年04月22日,输入22,显示20080331
2月是29天1 3 5  7 8 10 12 是31天  其他的都30天
另外帮我看一下if %yue% equ 11 if %ri% gtr 30 set %c:ri=29%哪里错了因该怎么写
麻烦快点,在线等答案。。。谢谢谢谢

日期计算论坛里有,搜索一下。 5个计算日期的批处理

http://bbs.bathome.net/viewthread.php?tid=874&extra=page%3D1

[ 本帖最后由 随风 于 2008-4-22 22:15 编辑 ]
技术问题请到论坛发帖求助!

TOP

  1. @echo off
  2. : 1
  3. set /p d=输入向前推的天数
  4. set nian=%date:~0,4%
  5. set yue=%date:~5,2%
  6. set ri=%date:~8,2%
  7. for %%i in (1 3 5  7 8 10 12) do if %yue% equ %%i if %ri% gtr 31 set ri=31
  8. for %%i in (4 6 9 11) do if %yue% equ %%i if %ri% gtr 30 set ri=30
  9. for %%i in (2) do if %yue% equ %%i if %ri% gtr 31 set ri=29
  10. if %ri% leq 0 set /a %yue%-1
  11. if %yue% leq 0 set /a %nian%-1
  12. set c=%nian%%yue%%ri%
  13. set /a q=%c%-%d%
  14. echo %q%
  15. pause
  16. goto 1
复制代码

麻烦看看哪里不对帮我改下。。。。。

[ 本帖最后由 随风 于 2008-4-23 06:31 编辑 ]

TOP

以后发帖请记得把代码用code扩起来,否则不便阅读.
你的这段代码,严格来说简直没法修改,臃肿.思路不清,.........
不过也别急,刚开始都这样,我们也是这样过来的.慢慢来,多看看别人的代码.

认真读读这篇代码吧,这是 namejm 写的,很容易懂.

:
  1. @echo off&color 1f
  2. :: code namejm
  3. set day=%date%
  4. set days=0
  5. echo.&echo.&echo       指定的日期是:%day%
  6. :Main
  7. cls&echo.&set /p input=      请指定要追溯的天数:
  8. setlocal enabledelayedexpansion
  9. :: 提取日期
  10. for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (
  11.     set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100
  12. )
  13. set /a sd-=input
  14. if %sd% leq 0 call :count
  15. cls&echo.&echo.
  16. echo       指定的日期是:%day%
  17. echo.
  18. set sm=0%sm%
  19. set sd=0%sd%
  20. echo       %input% 天前的日期是:%sy%-%sm:~-2%-%sd:~-2%
  21. pause>nul
  22. goto Main
  23. :count
  24. set /a sm-=1
  25. if !sm! equ 0 set /a sm=12, sy-=1
  26. call :days
  27. set /a sd+=days
  28. if %sd% leq 0 goto count
  29. goto :eof
  30. :days
  31. :: 获取指定月份的总天数
  32. set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
  33. set /a max=28+leap
  34. for /f "tokens=%sm%" %%a in (31 %max% 31 30 31 30 31 31 30 31 30 31) do (
  35.    set days=%%i
  36. )
  37. goto :eof
复制代码
技术问题请到论坛发帖求助!

TOP

另外帮我看一下if %yue% equ 11 if %ri% gtr 30 set %c:ri=29%哪里错了因该怎么写


后面的set用法不正确
  1. if %yue% equ 11 if %ri% gtr 30 set "c=%c:ri=29%"
复制代码
不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

  1. @echo off
  2. set a=输入追溺天数
  3. set nian=%date:~0.4%
  4. set yue=%date:~5,2%
  5. set ri=%date:~8,2%
  6. for %%a in (1 3 5 7 8 10 12) do (if %yue% equ %%a call :b)
  7. for %%b in (4 6 9 11) do (if %yue% equ %%b call :c)
  8. if %yue% equ 2 call :d
  9. :b
  10. if %ri% lep 0 set /a %yue%-1
  11. if %yue% leq 0 set /a %nian%-1
  12. set /a b=%ri%-%a%
  13. if %b% leq 0 set /a ri=31+%b%
  14. if %b% gtr 0 set ri=%b%
  15. goto 1
  16. :c
  17. if %ri% lep 0 set /a %yue%-1
  18. if %yue% leq 0 set /a %nian%-1
  19. set /a c=%ri%-%a%
  20. if %c% leq 0 set /a ri=30+%c%
  21. if %c% gtr 0 set ri=%c%
  22. goto 1
  23. :d
  24. if %ri% lep 0 set /a %yue%-1
  25. if %yue% leq 0 set /a %nian%-1
  26. set /a d=%ri%-%a%
  27. if %d% lep 0 set /a ri=29+%d%
  28. if %c% gtr 0 set ri=%c%
  29. gpto 1
  30. :1
  31. set p=%nian%%yue%%ri%
  32. echo %p%
  33. pause
复制代码


帮我看下这个哪里不对???

TOP

返回列表