- 帖子
- 83
- 积分
- 178
- 技术
- 16
- 捐助
- 0
- 注册时间
- 2012-3-3
|
13楼
发表于 2012-4-16 10:53
| 只看该作者
回复 11# 菜鸟一个
for %%a in (y m d) do set /p "%%a=%%a: " & set /a "%%a=1000!%%a! %% 10000"
获取你指定的 年,月,日, 1000!%%a! %% 10000 是为了适应你把数字前面打了前缀的 0, 比如 9 月打成 09, 也一样可以让 m 得到 9 的值.
set /a "d-=7, m+=d-1>>32,y+=m-1>>32,m+=^!m*12,d+=(d-1>>32)&(31-(^!(m-4)|^!(m-6)|^!(m-9)|^!(m-11))-^!(m-2)*(3-(^!(y%%4)&^!^!(y%%100)|^!(y%%400)))), i=(((y<<4)+m)<<5)+d"
先计算 7 天前的日期, 再把那个日期转化成一个整数:
d-=7, 日数减 7;
m+=d-1>>32, 如果日数小于 1 了, 月数加 -1;
y+=m-1>>32, 如果月数小于 1 了, 年数加 -1;
m+=^!m*12, 如果月数等于 0 了, 月数加 12;
d+=(d-1>>32)&(31-(^!(m-4)|^!(m-6)|^!(m-9)|^!(m-11))-^!(m-2)*(3-(^!(y%%4)&^!^!(y%%100)|^!(y%%400)))),
如果日数小于 1 了, 按月数的情况加上 31(大月) 或者 (31-1)(小月) 或者 (31-3)(平年 2 月) 或者 (31-(3-1))(闰年 2 月);
i=(((y<<4)+m)<<5)+d,
相当于 (y<<9)+(m<<5)+d, 也相当于 y*2^9+m*2^5+d, 将 三元 的日期转化成一个整数, 便于比较大小.
dir /ad /o-d /tc /b,
以空格式, 以创建时间逆序(后创建的在前)显示当前目录下的子目录;
findstr "^[0-9]*\-[0-9][0-9]*\-[0-9][0-9]*",
找出 形如 "若干数字-至少1到2个数字-至少1到2个数字" 这样的样式: 例如: 2012-4-16;
for /f "tokens=1-3 delims=-" %%a in ...
将样式匹配 "2012-4-16" 类似形式的目录名解析成 3 部分, y -> %%a, m -> %%b, d -> %%c
daysAgo=(((%%a<<4)+%%b)<<5)+%%c-i,
前面 i 已经成为 7 天前日期对应的整数, 这里, 将每一个子目录的名称对应的 y/m/d 以同样方式转化为一个整数.
如果这个整数小于或等于 i, 就表明这个子目录的创建日期是指定日期 7 天或更多天之前, 所以可以删除. |
-
1
评分人数
-
|