1. 程式人生 > >批量刪除90天前日期命名的資料夾.bat

批量刪除90天前日期命名的資料夾.bat

d:
cd D:\MsgStorageServer\Bulk
@echo off
:: 求N天前的日期
:: 思路:
::   模擬手工運算,用日期數減去天數,差值為負時向高位借1。
:: 特點:
::   程式碼簡潔,容易理解,速度快慢取決於指定的天數大小

setlocal enabledelayedexpansion

:Main
cls
:: 日期可以帶星期,但是,必須以年月日的順序排列
:: 年份必須是四位,否則會出錯
set day=%date%
set days=0
echo.&echo.
echo       指定的日期是:%day%
echo.
::set /p input=      請指定要追溯的天數:
set input=90

:: 提取日期
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%

echo 刪除資料夾 %sy%%sm:~-2%%sd:~-2%
del /s /q %sy%%sm:~-2%%sd:~-2%
rd /s /q %sy%%sm:~-2%%sd:~-2%
::pause>nul

: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
set num=0
set str=31 %max% 31 30 31 30 31 31 30 31 30 31
for %%i in (%str%) do (
    set /a num+=1
    if %sm% equ !num! set days=%%i&goto :eof
)
goto :eof