标题: [数值计算] 只用if和SET做日期推算的批处理 [打印本页]
作者: a303862146 时间: 2008-4-22 22:03 标题: 只用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%哪里错了因该怎么写
麻烦快点,在线等答案。。。谢谢谢谢
作者: 随风 时间: 2008-4-22 22:13
日期计算论坛里有,搜索一下。 5个计算日期的批处理
http://bbs.bathome.net/viewthread.php?tid=874&extra=page%3D1
[ 本帖最后由 随风 于 2008-4-22 22:15 编辑 ]
作者: a303862146 时间: 2008-4-22 22:39
- @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 31 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
复制代码
麻烦看看哪里不对帮我改下。。。。。
[ 本帖最后由 随风 于 2008-4-23 06:31 编辑 ]
作者: 随风 时间: 2008-4-23 06:55
以后发帖请记得把代码用code扩起来,否则不便阅读.
你的这段代码,严格来说简直没法修改,臃肿.思路不清,.........
不过也别急,刚开始都这样,我们也是这样过来的.慢慢来,多看看别人的代码.
认真读读这篇代码吧,这是 namejm 写的,很容易懂.
:- @echo off&color 1f
- :: code namejm
- set day=%date%
- set days=0
- echo.&echo.&echo 指定的日期是:%day%
- :Main
- cls&echo.&set /p input= 请指定要追溯的天数:
- setlocal enabledelayedexpansion
- :: 提取日期
- for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (
- set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 100
- )
- set /a sd-=input
- if %sd% leq 0 call :count
- cls&echo.&echo.
- echo 指定的日期是:%day%
- echo.
- set sm=0%sm%
- set sd=0%sd%
- echo %input% 天前的日期是:%sy%-%sm:~-2%-%sd:~-2%
- pause>nul
- goto Main
- :count
- set /a sm-=1
- if !sm! equ 0 set /a sm=12, sy-=1
- call :days
- set /a sd+=days
- if %sd% leq 0 goto count
- goto :eof
- :days
- :: 获取指定月份的总天数
- set /a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
- set /a max=28+leap
- for /f "tokens=%sm%" %%a in (31 %max% 31 30 31 30 31 31 30 31 30 31) do (
- set days=%%i
- )
- goto :eof
复制代码
作者: ieutk 时间: 2008-4-23 19:12
另外帮我看一下if %yue% equ 11 if %ri% gtr 30 set %c:ri=29%哪里错了因该怎么写
后面的set用法不正确- if %yue% equ 11 if %ri% gtr 30 set "c=%c:ri=29%"
复制代码
作者: a303862146 时间: 2008-4-24 00:02
- @echo off
- set a=输入追溺天数
- set nian=%date:~0.4%
- set yue=%date:~5,2%
- set ri=%date:~8,2%
- for %%a in (1 3 5 7 8 10 12) do (if %yue% equ %%a call :b)
- for %%b in (4 6 9 11) do (if %yue% equ %%b call :c)
- if %yue% equ 2 call :d
- :b
- if %ri% lep 0 set /a %yue%-1
- if %yue% leq 0 set /a %nian%-1
- set /a b=%ri%-%a%
- if %b% leq 0 set /a ri=31+%b%
- if %b% gtr 0 set ri=%b%
- goto 1
- :c
- if %ri% lep 0 set /a %yue%-1
- if %yue% leq 0 set /a %nian%-1
- set /a c=%ri%-%a%
- if %c% leq 0 set /a ri=30+%c%
- if %c% gtr 0 set ri=%c%
- goto 1
- :d
- if %ri% lep 0 set /a %yue%-1
- if %yue% leq 0 set /a %nian%-1
- set /a d=%ri%-%a%
- if %d% lep 0 set /a ri=29+%d%
- if %c% gtr 0 set ri=%c%
- gpto 1
- :1
- set p=%nian%%yue%%ri%
- echo %p%
- pause
复制代码
帮我看下这个哪里不对???
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |