你给出的代码是错误的,因为没有对获取的月、日的字首0做处理,将导致set/a 运算出错以及定义变量出错。
call,33 这里的33是33天前的意思,可以根据需要修改
echo.%D% 获取并显示N天前的日期- @echo off&setlocal enabledelayedexpansion
- call:D,33
- echo.%D%
- pause&exit
- :D
- for /f "tokens=1-3 delims=-:/ " %%a in ("%date%") do set Y=%%a&set M=%%b&set D=%%c
- if "%M:~0,1%"=="0" set M=%M:~1%
- if "%D:~0,1%"=="0" set D=%D:~1%
- set/a D-=%1
- if %D% gtr 0 goto:Y
- :M
- set/a M-=1
- if !M!==0 set/a Y-=1,M=12
- set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31+D"
- if %D% leq 0 goto:M
- :Y
- set M=0%M%&set D=0%D%&set D=%Y%-!M:~-2!-!D:~-2!
复制代码
[ 本帖最后由 hanyeguxing 于 2010-11-29 23:09 编辑 ] |