- ·上一篇文章:set截取字符详解
- ·下一篇文章:FreeDOS 下的 sys 命令帮助
- ·百度中搜索更多的关于“日期数字(首部含0)计算技巧不完全总结”相关内容
- ·谷歌中搜索更多的关于“日期数字(首部含0)计算技巧不完全总结”相关内容
- ******申明******
- 本站文章内容有部分为收录网络中其他网友内容,DOS资源站不保证所有的代码都适合你使用。
- 由于编辑匆忙,有可能造成某些脚本文件出现丢失代码或代码无法运行的情况,请网友根据情况自行修改。
- 如果能将出错部分反馈给我,那就更好了。
日期数字(首部含0)计算技巧不完全总结
先让我们来了解一下日期数字的构成,日期一般表示成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
注意,这里启用了延迟变量
当然,去掉数字首部0,还有其它的方法,如通过for中的0分割符截取、用if循环检测等
这些就不一一介绍了...

