中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 00:52
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个求昨天日期的批处理,原创,非网络版 查看 1,050 回复 3
楼 主 一个求昨天日期的批处理,原创,非网络版 发表于 2010-08-16 20:25 ·  中国 山东 济南 联通
新手上路
积分 8
发帖 8
注册 2010-08-15 23:30
15年会员
UID 172436
性别 男
状态 离线
因某些原因本人写了个求昨天日期的批处理,此脚本原创,非网络版(如有雷同,纯属巧合)。起初在网络上也搜了个相关的脚本,但是经测试在计算 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%
2 发表于 2010-08-16 20:26 ·  中国 山东 济南 联通
新手上路
积分 8
发帖 8
注册 2010-08-15 23:30
15年会员
UID 172436
性别 男
状态 离线
CNT,谢谢大家支持!
3 发表于 2010-08-16 23:45 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
批处理获取指定天数之前的日期
http://bbs.bathome.net/thread-3330-1-1.html
4 发表于 2010-08-18 12:48 ·  中国 山东 济南 联通
新手上路
积分 8
发帖 8
注册 2010-08-15 23:30
15年会员
UID 172436
性别 男
状态 离线
谢谢斑竹
论坛跳转: