本帖最后由 hanyeguxing 于 2011-4-19 16:11 编辑
日期不能直接参与 set/a 运算:1,因为含前缀0;2,进制不是10
如果不包含隐藏目录,则 ('dir /ad c:\temp') 解析可以直接使用for /d- @echo off
- set/a D=1%date:~8,2%%%100-7,M=1%date:~5,2%%%100,Y=%date:~0,4%
- if %D% leq 0 set/a M-=1,Y-=!M,M+=!M*12,"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)","D+=!(M-2)*(28+((!(Y%%4)&!!(Y%%100))|!(Y%%400)))+K*30+(!!(M-2)&!K)*31"
- set M=0%M%&set D=0%D%
- setlocal enabledelayedexpansion
- for /d %%a in ("c:\temp\*") do (
- set K=%%~ta
- if "!K:~0,10!" lss "%Y%-%M:~-2%-%D:~-2%" rd /s "%%~fa"
- )
复制代码 1,要求 %date% 形如 2011-04-19 ......
2, for 前面的代码用于运算出7天前的日期
3,下面的 if 语句根据需要选择使用 lss 或 leq
4,如果是32位系统,可以使用下面代码:- @echo off
- set/a D=1%date:~8,2%%%100-7,"E=!!((D>>32)+!D)",M=1%date:~5,2%%%100-E,Y=%date:~0,4%-!M*E,M+=!M*12,"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)","D+=(!(M-2)*(28+((!(Y%%4)&!!(Y%%100))|!(Y%%400)))+K*30+(!!(M-2)&!K)*31)*E"
- set M=0%M%&set D=0%D%
- setlocal enabledelayedexpansion
- for /d %%a in ("c:\temp\*") do (
- set K=%%~ta
- if "!K:~0,10!" lss "%Y%-%M:~-2%-%D:~-2%" rd /s "%%~fa"
- )
复制代码
|