Board logo

标题: [文件操作] 批处理怎样自动删除超过7天的文件夹? [打印本页]

作者: Hello123World    时间: 2011-4-19 14:50     标题: 批处理怎样自动删除超过7天的文件夹?

百度知道的问题:
公司有一台扫描图形电脑会自动将扫描的图形保存在c:\temp 文件夹下面. 规则是每天一个文件夹(如果当天有图形的话),文件夹下面是当天全部的图形

因为保存的期限无法设置,导致保存的图片文件过多,硬盘空间会被占满导致电脑死机,为了避免死机.现在想做一个自动删除超过7天的文件夹的批处理程序

请高手来,拒绝灌水~

我给出的答案(很费心思):
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "skip=5 tokens=1,4" %%i in ('dir  /ad c:\temp') do (set a=%%i
  4. set b=%%j
  5. if !a:~0,4!==%date:~0,4% (
  6. set /a c=!a:~5,2!*30+!a:~8,2!-!date:~5,2!*30-!date:~8,2!) else (
  7. rd /s /q c:\temp\!b!)
  8. if !c! geq 7 rd /s /q c:\temp\!b!
  9. )
  10. pause
复制代码
能帮忙检测一下语法或逻辑上的错误吗?
作者: hanyeguxing    时间: 2011-4-19 15:24

本帖最后由 hanyeguxing 于 2011-4-19 16:11 编辑

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

作者: CrLf    时间: 2011-4-19 15:47

本帖最后由 zm900612 于 2011-4-19 15:49 编辑

另类思路,用date命令判断出合法的前六天日期,将其设为变量,递归判断文件
作者: Batcher    时间: 2011-4-19 18:59

批处理删除指定天数日期之前的文件
http://bbs.bathome.net/thread-3334-1-1.html

批处理删除指定天数日期之前的文件夹
http://bbs.bathome.net/thread-3503-1-1.html
作者: 古草    时间: 2012-1-4 16:52

我正需用这个,不过,我是想做到,先判断硬盘的空间再做这删除的操作。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2