标题: 批处理日期数字(首部含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
测试代码:- @echo off
- Rem 注:这里的delims后面还跟着一个空格,目的是除去星期^_^。
- for /f "tokens=2,3 delims=/-. " %%i in ("%date%") do (
- echo 现在是:%%i 月 %%j 日
- set /a mm=1%%i-100,dd=1%%j-100
- )
- echo 去首部0后为:%mm% 月 %dd% 日
- pause>nul
复制代码
此种方法有个缺点是:要求数字的位数是明确的(幸好日期都是两位数的)。
2、在首部加一个数字,再除去该数字。
思路如下:08 ==> 10008(在前面加100) ===> 10008 %% 100(取除100后的余数)=8- @echo off
- for /f "tokens=2,3 delims=/-. " %%i in ("%date%") do (
- echo 现在是:%%i 月 %%j 日
- set /a mm=100%%i %% 100,dd=100%%j %% 100
- )
- echo 去首部0后为:%mm% 月 %dd% 日
- pause>nul
复制代码
注意:此种方法也要大致知道数字的位数,位数不同,前面添加的值也不同
如某数字:0849,则需要在前面加 1000 ,具体原因这里不再赘述。
3、直接取各位上数字计算。
测试代码:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=2,3 delims=/-. " %%i in ("%date%") do (
- echo 现在是:%%i 月 %%j 日
- set /a mm=1%%i,dd=1%%j
- set /a mm=!mm:~1,1!*10+!mm:~2,1!,dd=!dd:~1,1!*10+!dd:~2,1!
- )
- echo 去首部0后为:%mm% 月 %dd% 日
- 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 |