标题: [数值计算] [已解决]批处理计算日期时赋值变量怎么调用? [打印本页]
作者: hucuibai 时间: 2011-1-7 15:59 标题: [已解决]批处理计算日期时赋值变量怎么调用?
- @echo
- setlocal enabledelayedexpansion
- set /a day=%date:~5,2%%date:~8,2%
- set /a month=%date:~5,2%%%100
- set days=0101,0201,0301,0401,0501,0601,0701,0801,0901,1001,1101,1201
- set yesterdays=1231,0131,0228,0331,0430,0531,0630,0731,0831,0930,1031,1130
- for /f "tokens=%month% delims=," %%i in ("%days%") do (
- if %day%==%%i (for /f "tokens=%month% delims=," %%a in ("%yesterdays%") do (set /a date=%date:~0,4%%%a)) else (set /a date=%date:~0,4%%date:~5,2%%date:~8,2% ))
- echo %date%
- pause
复制代码
下面for循环引用day不对了!!我找不出原因!!
[ 本帖最后由 hucuibai 于 2011-1-12 17:24 编辑 ]
作者: hucuibai 时间: 2011-1-7 16:15
怎么没人帮忙看看!!
作者: tmplinshi 时间: 2011-1-7 16:23
这段代码执行没有错误,而你又没有说明你要进行什么操作,大家如何帮你?
作者: hucuibai 时间: 2011-1-7 16:29 标题: 回复 3楼 的帖子
运行是可以!我就是想做一个取日期的操作!我以前用的- set /a date=%date:~0,4%%date:~5,2%%date:~8,2%-1
- set date=%date:~0,8%
复制代码
用这个来取日期就是月初第一天的前一天 也就是一个月的最后一天取不到!所以我就想了这个比较笨的方法
这个运行是没问题 但是 下面for循环调用day变量就出错了!我是新手,搞不懂为什么,所有上来求教高手!
作者: hanyeguxing 时间: 2011-1-7 16:47
要求%date%必须形如2011-01-07。
某个月天数的计算:- @echo off
- set/a Y=%date:~0,4%,M=1%date:~5,2%%%100,"C=!(M-4)|!(M-6)|!(M-9)|!(M-11)","E=!(M-2)*(28+!(Y%%4))+C*30+(!!(M-2)&!C)*31"
- echo %Y%年%M%月有%E%天
- pause
复制代码
上个月的最后一天的获取:- @echo off
- set/a M=1%date:~5,2%%%100-1,Y=%date:~0,4%-!M,M+=!M*12,"C=!(M-4)|!(M-6)|!(M-9)|!(M-11)","E=!(M-2)*(28+!(Y%%4))+C*30+(!!(M-2)&!C)*31"
- set M=0%M%
- echo 今天的日期:%date:~0,10%
- echo 上个月的最后一天是:%Y%-%M:~-2%-%E%
- pause
复制代码
一天前的日期:- @echo off
- set/a D=1%date:~8,2%%%100-1,M=1%date:~5,2%%%100-!D,Y=%date:~0,4%-!M,M+=!M*12,"C=!(M-4)|!(M-6)|!(M-9)|!(M-11)","D+=!D*(!(M-2)*(28+!(Y%%4))+C*30+(!!(M-2)&!C)*31)"
- set M=0%M%&set D=0%D%
- echo 今天的日期:%date:~0,10%
- echo 一天前的日期:%Y%-%M:~-2%-%D:~-2%
- pause
复制代码
对于以上代码,如果限定年份为1901以前也包括,则可以把 !(Y%%4) 改成!(Y%%4)&!!(Y%%100))|!(Y%%400) 。
[ 本帖最后由 hanyeguxing 于 2011-1-7 18:20 编辑 ]
作者: hucuibai 时间: 2011-1-7 16:51 标题: 回复 5楼 的帖子
孤星同志!你这个是取的本月的最后一天吧!我是要求取前一天!也就是上个月的最后一天!而不是本月的!你这个好像我还看不太懂!!
作者: hucuibai 时间: 2011-1-7 16:55 标题: 回复 5楼 的帖子
哦 看错了 你这个是计算一个月有多少天,我是要取指定日期的时间 比如说20110201 我要取的就是20110131这个值
作者: hucuibai 时间: 2011-1-7 17:06
- @echo
- setlocal enabledelayedexpansion
- set /a day=%date:~5,2%%date:~8,2%
- set /a month=%date:~5,2%%%100
- echo %day%
- pause
复制代码
ECHO 处于打开状态。
C:\Documents and Settings\Administrator\桌面>setlocal enabledelayedexpansion
C:\Documents and Settings\Administrator\桌面>set /a day=0201
C:\Documents and Settings\Administrator\桌面>set /a month=02%100
C:\Documents and Settings\Administrator\桌面>echo 129
129
C:\Documents and Settings\Administrator\桌面>pause
请按任意键继续. . .
[ 本帖最后由 hucuibai 于 2011-1-7 17:08 编辑 ]
作者: hanyeguxing 时间: 2011-1-7 17:14
原帖由 hucuibai 于 2011-1-7 16:55 发表
哦 看错了 你这个是计算一个月有多少天,我是要取指定日期的时间 比如说20110201 我要取的就是20110131这个值
把月减1,获取上个月的天数,也就是上个月最后一天的日期。
要求%date%必须形如2011-01-07。
换个写法,要求年份为1900以后:- @echo off&setlocal enabledelayedexpansion
- set/a Y=%date:~0,4%,M=1%date:~5,2%%%100-1,R=Y%%4
- if %M%==0 set/a M=12,Y-=1
- set/a M2=M*2-2
- set A=312831303130313130313031
- set E=!A:~%M2%,2!
- if %R%==0 if %M%==2 set E=29
- set M=0%M%
- echo 今天的日期:%date:~0,10%
- echo 上个月的最后一天是:%Y%-%M:~-2%-%E%
- pause
复制代码
什么是闰年?
①、普通年能被4整除而不能被100整除的为闰年。 (如2004年就是闰年,1900年不是闰年)
②、世纪年能被400整除而不能被3200整除的为闰年。 (如2000年是闰年,3200年不是闰年)
③、对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年。(如172800年是闰年,86400年不是闰年)
公元前闰年规则如下:
①、非整百年:年数除4余数为1是闰年,即公元前1、5、9……年;
②、整百年:年数除400余数为1是闰年,年数除3200余数为1,不是闰年,年数除172800余1又为闰年,即公元前401、801……年
[ 本帖最后由 hanyeguxing 于 2011-1-7 18:10 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |