Board logo

标题: 如何删除特定目录下50天以前建立的子目录 [打印本页]

作者: blljp     时间: 2008-6-1 12:40    标题: 如何删除特定目录下50天以前建立的子目录
如何删除特定目录下50天以前建立的子目录及其中的文件(彻底删除不放到回收站),拜托各位高手指导。

作者: blljp     时间: 2008-6-1 14:45
没有人知道吗?

作者: terse     时间: 2008-6-1 15:27
刚发一个判断文件的 现在又来个文件夹 修改一下看能用否?没测试
@echo off&SET TT=50
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
    if %p3% gtr %TT%  goto ppp
:nxt
set/a p2-=1
   if %p2% equ 0 set/a p1-=1&&set p2=12
   set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2
   for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i
   if %p3% leq %tt% goto nxt
:ppp
set/a p3=%p3%-%tt%
setlocal enabledelayedexpansion
   for %%i in (p2 p3 t1 t2) do if !%%i! lss 10 set %%i=0!%%i!
   for /f "tokens=*" %%i in ('dir /b /s /ad') do (
   set "ta=%%~ti"
   if "!ta:~0,4!!ta:~5,2!!ta:~8,2!" leq "!p1!!p2!!p3!" rd /s /q "%%~fi" 2>nul
   )
pause
已修改 [ Last edited by terse on 2008-6-2 at 02:24 PM ]

作者: blljp     时间: 2008-6-1 21:23
谢谢 ! 可以使用,但我水平有限,还看不懂,有以下两点请教terse : 1, TT=50 是指50天天数吗,可以改成任意天数吧。 2, 我想删除d:\disk\dbs\bak\ 下的目录及其中文件 , 能帮我将相对路径改为绝对路径吗(以便批命令文件放在任意地方都能执行)?

作者: blljp     时间: 2008-6-1 21:34
补充 : 3, 执行完命令后桌面不留dos窗口(按任意键继续。。。)。

作者: blljp     时间: 2008-6-1 21:42
Originally posted by blljp at 2008-6-1 09:34 PM: 补充 : 3, 执行完命令后桌面不留dos窗口(按任意键继续。。。)。
这个问题我解决了,把最后的 pause 去掉就可以了 ,这样做行不行?

作者: terse     时间: 2008-6-1 23:13
Originally posted by blljp at 2008-6-1 21:23: 谢谢 ! 可以使用,但我水平有限,还看不懂,有以下两点请教terse : 1, TT=50 是指50天天数吗,可以改成任意天数吧。 2, 我想删除d:\disk\dbs\bak\ 下 ...
TT=50 是指50天天数,可以改成任意天数

作者: blljp     时间: 2008-6-2 10:20
2, 我想删除d:\disk\dbs\bak\ 下的目录及其中文件 , 能帮我将相对路径改为绝对路径吗(以便批命令文件放在任意地方都能执行,增强安全性。)?

作者: terse     时间: 2008-6-2 10:47
Originally posted by blljp at 2008-6-2 10:20: 2, 我想删除d:\disk\dbs\bak\ 下的目录及其中文件 , 能帮我将相对路径改为绝对路径吗(以便批命令文件放在任意地方都能执行,增强安全性。)?
要处理文件和文件夹需多个判断 试下面的(已修改):
@echo off
set tt=50&set ph=d:\disk\dbs\bak\
for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
    if %p3% gtr %TT%  goto ppp
:nxt
set/a p2-=1
   if %p2% equ 0 set/a p1-=1&&set p2=12
   set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2
   for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i
   if %p3% leq %tt% goto nxt
:ppp
set/a p3=%p3%-%tt%
setlocal enabledelayedexpansion
   for %%i in (p2 p3 t1 t2) do if !%%i! lss 10 set %%i=0!%%i!
   for /f "tokens=*" %%i in ('dir /b /s "%ph%"') do (
   set "ta=%%~ti"
   if exist "%%i" (
   if "!ta:~0,4!!ta:~5,2!!ta:~8,2!" leq "!p1!!p2!!p3!" rd /s /q "%%i" 2>nul
   ) else if "!ta:~0,4!!ta:~5,2!!ta:~8,2!" leq "!p1!!p2!!p3!" del /a/q/f "%%i" >nul 2>nul
   )
[ Last edited by terse on 2008-6-2 at 02:26 PM ]

作者: blljp     时间: 2008-6-2 12:37
Originally posted by terse at 2008-6-2 10:47 AM: 要处理文件和文件夹需多个判断 试下面的: [code] @echo off&SET TT=50&set ph=d:\disk\dbs\bak for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do ...
谢谢你,测试了,存在两个问题: 1.dos窗口停留在屏幕上(请按任意键继续. . .)。 2.批命令文件放在其他地方不起作用,只有放在d:\disk\dbs\bak下才行。

作者: liyyhh     时间: 2008-6-2 13:23
都是些高手呀,请教了。

作者: blljp     时间: 2008-6-2 16:21
谢谢你,测试了,存在两个问题: 1.dos窗口停留在屏幕上(请按任意键继续. . .)。 2.批命令文件放在其他地方不起作用,只有放在d:\disk\dbs\bak下才行。

作者: terse     时间: 2008-6-2 18:12
Originally posted by blljp at 2008-6-2 16:21: 谢谢你,测试了,存在两个问题: 1.dos窗口停留在屏幕上(请按任意键继续. . .)。 2.批命令文件放在其他地方不起作用,只有放在d:\disk\dbs\bak下才行。
不会吧 我刚测试一下好的啊

作者: blljp     时间: 2008-6-2 19:29
1.按任意键后dos窗口才能消失。 2.将批命令文件放在其他路径下(比如:d:/test下),则无法删除d:\disk\dbs\bak下50天前的文件夹,只有将批命令文件放在d:\disk\dbs\bak下才能删除其下的50天前的文件夹。 拜托再帮我看看。

作者: terse     时间: 2008-6-2 19:49
Originally posted by blljp at 2008-6-2 19:29: 1.按任意键后dos窗口才能消失。 2.将批命令文件放在其他路径下(比如:d:/test下),则无法删除d:\disk\dbs\bak下50天前的文件夹,只有将批命令文件放在 ...
你确认用了9楼修改后的代码吗 我这里测试过的啊

作者: blljp     时间: 2008-6-2 20:03
谢谢你! 我搞错了, 啥时候能学到你的水平呀!

作者: blljp     时间: 2008-6-2 20:08
Originally posted by blljp at 2008-6-2 08:03 PM: 谢谢你! 我搞错了, 啥时候能学到你的水平呀!
你太厉害了!

作者: wuyongchang     时间: 2008-6-3 10:32
感谢你的帮助,我对代码进行了测试和学习,发现其中有一些小问题,做了修改并测试,请指教。 @echo off D: REM 目标分区 CD D:\Test\ REM 目标文件夹 SET TT=15 REM 设定天数 for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100 if %p3% gtr %TT% goto ppp :nxt set/a p2-=1 if %p2% equ 0 set/a p1-=1&&set p2=12 set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2 for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3=%p3%+%%i if %p3% leq %tt% goto nxt :ppp setlocal enabledelayedexpansion set/a p3=p3-tt REM 新增的赋值语句,减去设定的天数。 for %%i in (p2 p3) do if !%%i! lss 10 set %%i=0!%%i! echo "%P2%&%p3%" for /f "tokens=*" %%i in ('dir /b /ad') do ( set "ta=%%~ti" if "!ta:~0,4!!ta:~5,2!!ta:~8,2!" leq "!p1!!p2!!p3!" rd /s /q "%%~fi" 2>nul ) PAUSE

作者: blljp     时间: 2008-6-3 13:23
Originally posted by wuyongchang at 2008-6-3 10:32 AM: 感谢你的帮助,我对代码进行了测试和学习,发现其中有一些小问题,做了修改并测试,请指教。 @echo off D: REM 目标分区 CD D:\Test\ REM 目标文件夹 ...
不错,高手呀!能否发一个针对文件的。