znlvhui 发表于 2011-1-29 17:49:31

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

AU3下怎么做到保留文件夹下最近创建时间的5个文件,其他的删除。
请高手给代码。

wsfda 发表于 2011-1-29 18:08:39

提供思路:获取文件夹创建时间来对比。。嘿嘿

smartzbs 发表于 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 , $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] = $sDir & "\" & $aFile[$i]
                $aReFile[$i-1] = $FileTime
        Next
        _ArraySort($aReFile, 1, 0, 0, 1);根据文件时间排序
        $FileTime = $aReFile[$iFiles-1];处理秒相同的,即使大于5个也不删除
        For $i = $iFiles To UBound($aReFile)-1
                If $aReFile[$i] = $FileTime Then ContinueLoop
                ;FileDelete($aReFile[$i]);要删除文件就把这句注释去掉
        Next
        ;_ArrayDisplay($aReFile)
EndIf

znlvhui 发表于 2011-1-29 18:23:46

呵呵,新手没办法了。多用用别的人代码来提高自己。感谢"smartzbs"我先测试下。

znlvhui 发表于 2011-1-29 19:01:18

本帖最后由 znlvhui 于 2011-1-29 19:11 编辑

"smartzbs"的代码测试有错误,排除有错误,我在目录新建几个文件,不能保留最近创建的5个文件。
第一次运行可以正确,当目录下有五个文件时再新建文件后运行会错误。

_ddqs. 发表于 2011-1-29 21:45:07

#include <Array.au3>


Local $count = 0, $avArray, $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]
                $avArray = $count
                $avArray[$count] = FileGetTime($dirpath & $file, 0, 1)
                If @error Then $avArray[$count] = FileGetTime($dirpath & $file, 1, 1)
                $avArray[$count] = $file
                ;ConsoleWrite(@LF &" 时间: "& $avArray[$count]&" 文件: "& $avArray[$count] & @CR)
        EndIf
WEnd

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

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

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


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

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

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

Next

netegg 发表于 2011-1-30 05:18:12

插值做会不会快一些
页: [1]
查看完整版本: 保留文件夹下最近创建时间的5个文件,其他的删除。