找回密码
 加入
搜索
查看: 2378|回复: 6

[AU3基础] 保留文件夹下最近创建时间的5个文件,其他的删除。

  [复制链接]
发表于 2011-1-29 17:49:31 | 显示全部楼层 |阅读模式
AU3下怎么做到保留文件夹下最近创建时间的5个文件,其他的删除。
请高手给代码。
发表于 2011-1-29 18:08:39 | 显示全部楼层
提供思路:获取文件夹创建时间来对比。。嘿嘿
发表于 2011-1-29 18:09:35 | 显示全部楼层
本帖最后由 smartzbs 于 2011-1-30 09:36 编辑

#include <File.au3>
#include <Array.au3>

$sDir = @ScriptDir
If StringRight($sDir, 1)="\" Then $sDir = StringTrimRight($sDir, 1)

$aFile = _FileListToArray($sDir)
$iFiles = 5;保留5个文件
If UBound($aFile)>$iFiles+1 Then
        Local $aReFile[UBound($aFile)-1][2] , $FileTime
        For $i = 1 To UBound($aFile)-1
                ;0 = Modified (default)
                ;1 = Created
                ;2 = Accessed
                $FileTime = FileGetTime($sDir & "\" & $aFile[$i], 0, 1);第1个参数:0修改时间,1创建时间,自己根据需要改,只能取到以秒为最小单位
                $aReFile[$i-1][0] = $sDir & "\" & $aFile[$i]
                $aReFile[$i-1][1] = $FileTime
        Next
        _ArraySort($aReFile, 1, 0, 0, 1);根据文件时间排序
        $FileTime = $aReFile[$iFiles-1][1];处理秒相同的,即使大于5个也不删除
        For $i = $iFiles To UBound($aReFile)-1
                If $aReFile[$i][1] = $FileTime Then ContinueLoop
                ;FileDelete($aReFile[$i][0]);要删除文件就把这句注释去掉
        Next
        ;_ArrayDisplay($aReFile)
EndIf
 楼主| 发表于 2011-1-29 18:23:46 | 显示全部楼层
呵呵,新手没办法了。多用用别的人代码来提高自己。感谢"smartzbs"我先测试下。
 楼主| 发表于 2011-1-29 19:01:18 | 显示全部楼层
本帖最后由 znlvhui 于 2011-1-29 19:11 编辑

"smartzbs"的代码测试有错误,排除有错误,我在目录新建几个文件,不能保留最近创建的5个文件。
第一次运行可以正确,当目录下有五个文件时再新建文件后运行会错误。
发表于 2011-1-29 21:45:07 | 显示全部楼层
#include <Array.au3>


Local $count = 0, $avArray[1][1], $iKeep = 5, _  ;要保留(最新)的文件数
                $dirpath = @ScriptDir & "\BackUp" ;要删除文件的目录路径


; 显示当前目录中所有文件的文件名
$search = FileFindFirstFile($dirpath & "*.*")

; 检查搜索是否成功
If $search = -1 Then
        MsgBox(0, "错误", "没有文件/目录 匹配搜索")
        Exit
EndIf

While 1
        $file = FileFindNextFile($search)
        If @error Then ExitLoop
        If StringInStr(FileGetAttrib($dirpath & $file), "D") > 0 Then
                ;ConsoleWrite(@LF &"目录: "& $file & @CR)
        Else
                $count += 1
                ReDim $avArray[$count + 1][2]
                $avArray[0][0] = $count
                $avArray[$count][0] = FileGetTime($dirpath & $file, 0, 1)
                If @error Then $avArray[$count][0] = FileGetTime($dirpath & $file, 1, 1)
                $avArray[$count][1] = $file
                ;ConsoleWrite(@LF &" 时间: "& $avArray[$count][0]  &" 文件: "& $avArray[$count][1] & @CR)
        EndIf
WEnd

; 关闭搜索句柄
FileClose($search)

_ArraySort($avArray, 1, 1, $avArray[0][0], 0) ;以时间递减排序

_ArrayDisplay($avArray, "$avArray 为二维数组")


For $i = $iKeep + 1 To $avArray[0][0] ;保留最新的 5个文件

        ConsoleWrite(@LF & " 要删除的文件: " & $dirpath & $avArray[$i][1] & @CR)

        ;删除文件!!!
        ;FileDelete($dirpath & $avArray[$i][1])

Next
发表于 2011-1-30 05:18:12 | 显示全部楼层
插值做会不会快一些
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-21 14:30 , Processed in 0.121755 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表