Board logo

标题: [文件操作] 批处理删除某目录下三天前创建的文件。 [打印本页]

作者: reddiamond    时间: 2008-8-4 15:19     标题: 批处理删除某目录下三天前创建的文件。

批处理删除某目录下(d:\111)三天前所创建的文件,不知能否实现,假如能够实现,还望高手指点。
作者: namejm    时间: 2008-8-4 16:30

  N天前和N天后之类的时间计算,历来是批处理的一大难题——并不是无法计算,而是代码太过复杂,让人望而却步,不过好在也有不少牛人找到了解决的办法,可以参考这个帖子:批处理 计算日期 函数 调用
  另:如果是删除具体日期(比如 2008-01-01)之前或之后的文件,则用批处理来解决将会十分容易。
作者: terse    时间: 2008-8-5 01:25

  1. @echo off
  2. SET/p TT=输入天数:
  3. SET/p PH=输入路径:
  4. for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
  5.     if %p3% gtr %TT%  goto ppp
  6. :nxt
  7. set/a p2-=1
  8.    if %p2% equ 0 set/a p1-=1&set p2=12
  9.    set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2
  10.    for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3+=%%i
  11.    if %p3% leq %tt% goto nxt
  12. :ppp
  13. set/a p3-=tt
  14. setlocal enabledelayedexpansion
  15.    for %%i in (p2 p3) do if !%%i! lss 10 set %%i=0!%%i!
  16. for /r "%ph%" %%i in (*) do set t=%%~ti&call :loop "%%i"
  17. pause
  18. goto :eof
  19. :loop
  20. if %p1%-%p2%-%p3% gtr %t:~,10% del %1
复制代码

作者: reddiamond    时间: 2008-8-5 11:43     标题: 出现如下错误

原帖由 terse 于 2008-8-5 01:25 发表
@echo off
SET/p TT=输入天数:
SET/p PH=输入路径:
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 ...



执行之后显示nxt不是内部或外部命令,也不是可运行的程序
作者: Batcher    时间: 2008-8-5 11:47     标题: 回复 3楼 的帖子

%%~ti获取的是文件的 Last Access Time
而不是 Creation Time
作者: terse    时间: 2008-8-5 13:19

原帖由 reddiamond 于 2008-8-5 11:43 发表 [url=redirect.php?goto=findpost&pid=6561&ptid=1338][/url]
执行之后显示nxt不是内部或外部命令,也不是可运行的程序

确认输入天数了吗?如%TT% 为空时 才有你说的情况 加个判断
原帖由 Batcher 于 2008-8-5 11:47 发表
%%~ti获取的是文件的 Last Access Time
而不是 Creation Time

取得创建时间dir /od /tc /a-d就可以做到
修改一下试试:
  1. @echo off
  2. SET/p TT=输入天数:
  3. SET/p PH=输入路径:
  4. if "%tt%"=="" set tt=0
  5. for /f "tokens=1-3 delims=-/\:. " %%i in ("%date%") do set /a p1=%%i,p2=100%%j%%100,p3=100%%k%%100
  6.     if %p3% gtr %TT%  goto ppp
  7. :nxt
  8. set/a p2-=1
  9.    if %p2% equ 0 set/a p1-=1,p2=12
  10.    set/a PN2="!(p1%%4)&!(!(p1%%100))|!(p1%%400)",PN2=28+PN2
  11.    for /f "tokens=%p2%" %%i in ("31 %pN2% 31 30 31 30 31 31 30 31 30 31") do set/a p3+=%%i
  12.    if %p3% leq %tt% goto nxt
  13. :ppp
  14. set/a p3-=tt
  15. setlocal enabledelayedexpansion
  16.    for %%i in (p2 p3) do if !%%i! lss 10 set %%i=0!%%i!
  17.      for /f "skip=5 tokens=1,3*" %%i in ('dir /tc /a-d "%ph%\*.*" 2^>nul^|findstr /v "字节"') do (
  18.          if %p1%-%p2%-%p3% geq %%i del "%ph%\%%k"
  19. )
  20. pause&exit
复制代码

作者: reddiamond    时间: 2008-8-5 15:39

原帖由 terse 于 2008-8-5 13:19 发表

确认输入天数了吗?如%TT% 为空时 才有你说的情况 加个判断

取得创建时间dir /od /tc /a-d就可以做到
修改一下试试:
@echo off
SET/p TT=输入天数:
SET/p PH=输入路径:
if "%tt%"=="" set tt=0
for /f " ...


如附件中的错误
作者: terse    时间: 2008-8-5 19:05

原帖由 reddiamond 于 2008-8-5 15:39 发表
[url=redirect.php?goto=findpost&pid=6582&ptid=1338][/url]如附件中的错误
想不出什么原因 出现你这样的情况 因为我这里是测试后发的  也许的显示格式问题 但看你的截图  怎么路径是D:\dos1\dos怎么会有C:\盘文件找不到的提示呢?我发不了测试图
作者: Batcher    时间: 2008-8-5 19:10     标题: 回复 7楼 的帖子

del默认无法删除隐藏文件、系统文件等
需要加开关
看看帮助吧
del /?
作者: fastslz    时间: 2008-8-5 20:56

  1. @echo off
  2. regedit /e "%temp%\bak.reg" "HKEY_CURRENT_USER\Control Panel\International"
  3. ::::备份系统原时间日期格式
  4. >aDate.reg echo REGEDIT4
  5. >>aDate.reg echo.
  6. >>aDate.reg echo [HKEY_CURRENT_USER\Control Panel\International]
  7. >>aDate.reg echo "sShortDate"="yyyy-MM-dd"
  8. >>aDate.reg echo "sDate"="-"
  9. >>aDate.reg echo "sTimeFormat"="HH:mm:ss"
  10. regedit /s aDate.reg&del aDate.reg
  11. ::::统一格式化系统日期格式(无需reg.exe兼容Win2000)
  12. >tmp.vbs echo Wscript.echo FormatDateTime (DateAdd("d", -3 ,Date),2)
  13. for /f "delims=" %%i in ('cscript.exe //nologo tmp.vbs') do set aDate=%%i& del tmp.vbs
  14. ::::用VBS计算当前日期减 3 天,如果要当前之后的 3 天请将 ↑上面 2 行的 -3 改成 +3
  15. echo %aDate%
  16. set 年=%aDate:~0,4%
  17. set 月=%aDate:~5,2%
  18. set 日=%aDate:~8,2%
  19. set 3天前=%年%%月%%日%
  20. setlocal enabledelayedexpansion
  21. Wmic Datafile Where "Drive='D:' and path='\\111\\' and CreationDate<'!3天前!000000.000000+***'" call delete /NOINTERACTIVE
  22. regedit /s "%temp%\bak.reg"&del "%temp%\bak.reg"
  23. ::::还原系统原时间日期格式
  24. pause
复制代码

[ 本帖最后由 fastslz 于 2008-8-5 20:57 编辑 ]
作者: reddiamond    时间: 2008-8-6 16:18

原帖由 fastslz 于 2008-8-5 20:56 发表
@echo off
regedit /e "%temp%\bak.reg" "HKEY_CURRENT_USER\Control Panel\International"
::::备份系统原时间日期格式
>aDate.reg echo REGEDIT4
>>aDate.reg echo.
>>aDate.reg echo [HKEY_CURRENT_USER\Con ...




谢谢!这个测试成功。
谢谢所有回帖的高手们.




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