以后发帖请记得把代码用code扩起来,否则不便阅读.
你的这段代码,严格来说简直没法修改,臃肿.思路不清,.........
不过也别急,刚开始都这样,我们也是这样过来的.慢慢来,多看看别人的代码.
认真读读这篇代码吧,这是 namejm 写的,很容易懂.
:- @echo off&color 1f
- :: code namejm
- set day=%date%
- set days=0
- echo.&echo.&echo 指定的日期是:%day%
- :Main
- cls&echo.&set /p input= 请指定要追溯的天数:
- setlocal enabledelayedexpansion
- :: 提取日期
- for /f "tokens=1-3 delims=-/. " %%i in ("%day%") do (
- set /a sy=%%i, sm=100%%j %% 100, sd=100%%k %% 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 /f "tokens=%sm%" %%a in (31 %max% 31 30 31 30 31 31 30 31 30 31) do (
- set days=%%i
- )
- goto :eof
复制代码
|