jblzg的技术园

关注基于.Net的Web解决方案,高性能数据库设计,高性能Web服务解决方案,关注移动开发

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

该批处理可以考虑到例如4月1日前一天是3月31日,而不是4月0日的问题,值得参考。

 
@echo off
:: 作者: namejm  出自:cn-dos
:: 求N天前的日期
:: 日期可以带星期,但是,必须以年月日的顺序排列
:: 年份必须是四位,否则会出错
@echo off
:Main
cls
set day
=%date%
set days
=0
echo.
&echo.
echo       当前日期是:
%day%
echo.
&set /p input=      请指定要追溯的天数:
setlocal enabledelayedexpansion
:: 提取日期
for /"tokens=1-3 delims=-/. " %%in ("%day%"do (
    set 
/a sy=%%i, sm=100%%%% 100, sd=100%%%% 100
)
set 
/a sd-=input
if %sd% leq 0 call :count
cls
&echo.&echo.
echo       当前日期是:
%day%
echo.
set sm
=0%sm%
set sd
=0%sd%
echo       
%input% 天前的日期是:%sy%-%sm:~-2%-%sd:~-2%
pause
>nul
goto Main

:count
set 
/a sm-=1
if !sm! equ 0 set /a sm=12, sy-=1
call :days
set 
/a sd+=days
if %sd% leq 0 goto count
goto :eof

:days
:: 获取指定月份的总天数
set 
/a leap="^!(sy %% 4) & ^!(^!(sy %% 100)) | ^!(sy %% 400)"
set 
/a max=28+leap
for /"tokens=%sm%" %%in ("31 %max% 31 30 31 30 31 31 30 31 30 31"do set days=%%i
goto :eof

 

原文链接:http://bbs.verybat.org/viewthread.php?tid=11441

posted on 2010-03-05 17:19  jblzg  阅读(2005)  评论(0编辑  收藏  举报