Board logo

标题: 批处理日期数字(首部含0)计算技巧不完全总结 [打印本页]

作者: youxi01    时间: 2008-5-3 23:48     标题: 批处理日期数字(首部含0)计算技巧不完全总结

教程作者:youxi01,转载请注明。

先让我们来了解一下日期数字的构成,日期一般表示成2008-05-03或2008/05/03的形式。
也就是说用for提取出的数字在首部可能含有0(当日期数小于10时),如上面得到的日期
数字将会是 03。而对于这样的数字,在运用set /a来进行运算之前,先需要将首部的0
去掉,去掉方法有以下几种(这里只推荐用set /a来去掉首部0,其它的不做介绍):
这里,用首部含0数字:08 为例。

1、在首部加一个数字,再减去相应值(注意减的值和加的数字的关系)。

要去掉 08 前面的0,可以这样办:08 ==> 108(首部加1) ===> 108-100=8
测试代码:
  1. @echo off
  2. Rem 注:这里的delims后面还跟着一个空格,目的是除去星期^_^。
  3. for /f "tokens=2,3 delims=/-. " %%i in ("%date%") do (
  4. echo 现在是:%%i  月  %%j 日
  5. set /a mm=1%%i-100,dd=1%%j-100
  6. )
  7. echo 去首部0后为:%mm% 月 %dd% 日
  8. pause>nul
复制代码
此种方法有个缺点是:要求数字的位数是明确的(幸好日期都是两位数的)。

2、在首部加一个数字,再除去该数字。

思路如下:08 ==> 10008(在前面加100) ===> 10008 %% 100(取除100后的余数)=8
  1. @echo off
  2. for /f "tokens=2,3 delims=/-. " %%i in ("%date%") do (
  3. echo 现在是:%%i  月  %%j 日
  4. set /a mm=100%%i %% 100,dd=100%%j %% 100
  5. )
  6. echo 去首部0后为:%mm% 月 %dd% 日
  7. pause>nul
复制代码
注意:此种方法也要大致知道数字的位数,位数不同,前面添加的值也不同
如某数字:0849,则需要在前面加 1000 ,具体原因这里不再赘述。

3、直接取各位上数字计算。

测试代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2,3 delims=/-. " %%i in ("%date%") do (
  3. echo 现在是:%%i  月  %%j 日
  4. set /a mm=1%%i,dd=1%%j
  5. set /a mm=!mm:~1,1!*10+!mm:~2,1!,dd=!dd:~1,1!*10+!dd:~2,1!
  6. )
  7. echo 去首部0后为:%mm% 月 %dd% 日
  8. pause>nul
复制代码
注意,这里启用了延迟变量,相关知识请看:http://bbs.bathome.net/viewthread.php?tid=112&extra=page%3D5
当然,去掉数字首部0,还有其它的方法,如通过for中的0分割符截取、用if循环检测等
这些就不一一介绍了...
作者: doupip    时间: 2010-10-29 14:19

思路非常好,呵呵,不管哪个里面计算日期都比较有用




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