Board logo

标题: 一个求昨天日期的批处理,原创,非网络版 [打印本页]

作者: 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
谢谢斑竹