标题: 一个求昨天日期的批处理,原创,非网络版
[打印本页]
作者: dguest
时间: 2010-8-16 20:25
标题: 一个求昨天日期的批处理,原创,非网络版
因某些原因本人写了个求昨天日期的批处理,此脚本原创,非网络版(如有雷同,纯属巧合)。起初在网络上也搜了个相关的脚本,但是经测试在计算 set /a dd=08-1的时候会报错,但是搜了很多都是一个版本的脚本,于是之下自己写了个。
先说脚本的大体思路:由于%date%中月和日都是两位表示的,因此比如今天为8号或9号在计算昨天日期的时候就会出现 set /a dd=08-1,报错
“无效数字。数字常数只能是十进制(17),十六位进制(0x11)或八进制(021)。”,在此脚本中我是将月和日中两位数分开来分别进行计算和判断的,过程有些复杂(希望大家给出更好的指点),有兴趣的朋友可以帮忙一起测试下,提出问题所在,我会细心的去修改,也希望对此有帮助的朋友可以直接copy走,记得留个名就好。
在脚本中本人未做闰2月的处理,也算是脚本的一个不完善吧,其实是因为我需要不到,因此懒得做了,呵呵。
上代码:
@echo off&setlocal enabledelayedexpansion
@set td1=%date:~8,1%
@set td2=%date:~9,1%
@set tm1=%date:~5,1%
@set tm2=%date:~6,1%
@set /a od2=!td2!-1
set /a od1=%td1%-1
@if %od2%==-1 (
set od=%od1%9
goto :isNewUpdate
)
@if %od2%==0 (goto :d2)
set od=%td1%%od2%
goto :isNewUpdate
::普通日期,进行是否更新检测
:d2
if %od1%==-1 (
goto :checkMonth
) else (
set od=%td1%0
goto :isNewUpdate
)
::11,21,31三天的前一天日期判断
::01这一天的前一天判断,为30还是31
:checkMonth
set /a om2=%tm2%-1
set /a om1=%tm1%-1
if %om2%==-1 (
set om=9
goto :previousMonth
)
if %om2%==0 (
set od=31
goto :isNewUpdate
)
set om=%tm1%%om2%
goto :previousMonth
:previousMonth
for %%a in (01 03 05 07 08 10 12) do (
if !om! == %%a (
set od=31
goto :isNewUpdate
)
)
::如果是1,3,5,7,8,10,12月,设定前一天为31
for %%b in (02 04 06 09 11) do (
if !om!==%%b (
set od=30
goto :isNewUpdate
)
)
::如果是2,4,6,9,11月,设定前一天为30
:isNewUpdate
echo %od%
作者: dguest
时间: 2010-8-16 20:26
CNT,谢谢大家支持!
作者: HAT
时间: 2010-8-16 23:45
批处理获取指定天数之前的日期
http://bbs.bathome.net/thread-3330-1-1.html
作者: dguest
时间: 2010-8-18 12:48
谢谢斑竹