Board logo

标题: [日期时间] 谁能帮我解释这个月份计算的批处理? [打印本页]

作者: 7016427    时间: 2014-11-8 09:47     标题: 谁能帮我解释这个月份计算的批处理?

  1. set y=1%date:~5,2%
  2. set k=%date:~0,4%
  3. if "%y%"=="101" (set /a y+=12&set /a k-=1)
  4. set /a y-=1
  5. echo %k%年%y:~1,2%月
复制代码

作者: amwfjhh    时间: 2014-11-8 10:27

不明白这个批处理想干嘛,从内容上看有点像根据当前日期获取阴历年月,但这个有很多因素没考虑进去,可以说在特定情况下才能用。
作者: DAIC    时间: 2014-11-8 13:20

回复 2# amwfjhh


    跟阴历没有关系。代码的作用是计算上个月
作者: amwfjhh    时间: 2014-11-8 13:32

对,准确的说应该是计算上个月所在年月。用来推测阴历还差一大截,闰年闰月等各种情况要考虑到。
作者: 7016427    时间: 2014-11-8 14:13

回复 4# amwfjhh

你好!是推算上月月份,我想学习。但是,我不知道每句代码的意思。哪位老师能帮我解释?
作者: amwfjhh    时间: 2014-11-8 14:21

回复 5# 7016427


    这个就是基础的SET命令用法哈,你可以去论坛搜下相关贴子,对于批处理,FOR与SET是须要掌握的,这两个基本会用了,才算批处理入门了。
具体到这个代码我大概说下里面用到的特点,你对照教学贴自己看下嘛,第一,二,五句是用的SET字符截取功能,第三,四句用的是SET的赋值功能。
详情你可以SET /?然后论坛搜索教学贴。
作者: 7016427    时间: 2014-11-8 14:42

回复 6# amwfjhh

你好!再请教老师,以下问题:
set y=1%date:~5,2%   这句1代表什么意思?
set k=%date:~0,4%
if "%y%"=="101" (set /a y+=12&set /a k-=1)  这句101、12各代表什么意思?
set /a y-=1
echo %k%年%y:~1,2%月 这句1,2% 代表什么意思?
作者: amwfjhh    时间: 2014-11-8 15:04

~表示偏移,第一个字符偏移量为0,第二个为1,依次类推,因素第一句表示从当前日期中取出第6位起的两个字符,这个批处理有个前提,就是系统日期格式应为2014-11-08或2014/11/08的格式,那么这句取出来的就是月份了。由于要算上个月是多少,所以对于当前月份为1月时要作特殊处理,故有后面的加减运算。
作者: 7016427    时间: 2014-11-8 15:42

回复 8# amwfjhh

if "%y%"=="101" (set /a y+=12&set /a k-=1)  这句101、12各代表什么意思?
作者: amwfjhh    时间: 2014-11-8 15:48

就是上一个回答的最后一句,对月份的特殊处理,取值时在前放加了个1,因此如为1月就为101。加12是为了防止做减法时数据超出合理范围,因为后面对月份又作了次截取字符处理,不加12就会得出00月的结果。其实用这个00也能进行判断。
作者: 7016427    时间: 2014-11-8 16:41

回复 10# amwfjhh
谢谢指导!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2