現小弟遇到這樣一個難題﹕
  在這個文件里有許多文件﹐但其中有一些文件是重復的﹗現要冊除那些重復的文件﹐但要在那些重復文件中保留一個文件﹗
   例﹕在文件夾abc下有下面的文件﹕
mmm.000001.200308121345.com
mmm.000002.200308121378.com
mmm.000003.200308121412.com
mmm.000003.200308121418.com
mmm.000003.200308121422.com
mmm.000003.200308121447.com
mmm.000004.200308121512.com
mmm.000004.200308121523.com
mmm.000004.200308121536.com
mmm.000005.200308121537.com
mmm.000006.200308121578.com
mmm.000007.200308121610.com
mmm.000007.200308121612.com
mmm.000008.200308121675.com
mmm.000009.200308121704.com
mmm.000010.200308121731.com
mmm.000011.200308121801.com
mmm.000012.200308121812.com   
mmm.000012.200308121845.com
mmm.000012.200308121901.com
mmm.000012.200308121941.com
mmm.000012.200308121972.com
mmm.000013.200308121982.com
mmm.000013.200308122001.com
mmm.000013.200308122008.com
mmm.000013.200308122022.com
mmm.000013.200308122042.com
mmm.000013.200308122101.com
mmm.000014.200308122112.com現我只想在那些重復的文件中保留哪些從第十二位算起到第二十三位中最大的如﹕像mmm.000003.200308121447.com,mmm.000013.200308122101.com,mmm.000004.200308121536.com,mmm.000007.200308121612.com,mmm.000012.200308121972.com保留﹐其它那些重復的文件要刪除。該怎樣實現?請各位大大幫忙﹗﹗﹗﹗﹗

解决方案 »

  1.   

    你的文件应该是由日期组成的,你可以设置一个常数,当文件名小于这一常数时,就可以删除掉。
    以下代码需要引用Microsoft Scripting Runtimeconst FileDate as string="你要的数据"dim fs as new filesystemobject
    dim fd as folder
    dim fl as file
    dim fname as stringset fd=fs.getfolder("路径")
    for each fl in fd.files
        fname=mid(fl.name,12,12)
        if fname<FileDate then
            kill "路径"& fl.name
        end if
    next
        
      

  2.   

    我這些文件是從Sql server數據庫中down出來的﹐但這文件格式是由程序決定﹐因為在數據庫中有重復的我不需要的數據﹐但為了數據的正確性﹐數據庫中的那些重復的不能刪除﹐而只能由down下來的那些重復文件中只保留時間最新的文件﹐其它重復的文件要delete!
      

  3.   

    晕,常数根据你的需要定义。比如你要删除2003年8月10下午3点以前的文件,那么FileDate="200308101500"
      

  4.   

    但是我并不是在特定的時間生成的文件﹗這樣怎么定義這個常數﹗要是根據你所說的﹐那不是在這個時間段的重復的文件也不能delete!
      

  5.   

    你的文件应该是由日期组成的,你可以设置一个常数,当文件名小于这一常数时,就可以删除掉。
    以下代码需要引用Microsoft Scripting Runtimeconst FileDate as string="你要的数据"dim fs as new filesystemobject
    dim fd as folder
    dim fl as file
    dim fname as stringset fd=fs.getfolder("路径")
    for each fl in fd.files
        fname=mid(fl.name,12,12)
        if fname<FileDate then
            kill "路径"& fl.name
        end if
    next它的可以实现
      

  6.   

    写一个程序!(VB)追加一个filelistbox,程序如下:Private Sub Command1_Click()
        
        File1.Path = "&Auml;&atilde;&micro;&Auml;&Icirc;&Auml;&frac14;&thorn;&Euml;ù&Ocirc;&Uacute;&micro;&Auml;&Auml;&iquest;&Acirc;&frac14;&pound;&iexcl;&pound;¨abc&pound;&copy;"
        
        Dim a() As String
        Dim i As Long, j As Long
        ReDim a(j) As String
        For i = 1 To File1.ListCount
            If a(j) <> File1.List(i - 1) Then
                a(j) = File1.List(i - 1)
                j = j + 1
                ReDim Preserve a(j) As String
            Else
                If Right$(File1.Path, 1) = "\" Then
                    Kill File1.Path & File1.List(i - 1)
                Else
                    Kill File1.Path & "\" & File1.List(i - 1)
                End If
            End If
        Next i
        
    End Sub
      

  7.   

    Private Sub Command1_Click()
        
        File1.Path = "your folder name!(abc&pound;&copy;"
        
        Dim a() As String
        Dim i As Long, j As Long
        ReDim a(j) As String
        For i = 1 To File1.ListCount
            If a(j) <> File1.List(i - 1) Then
                a(j) = File1.List(i - 1)
                j = j + 1
                ReDim Preserve a(j) As String
            Else
                If Right$(File1.Path, 1) = "\" Then
                    Kill File1.Path & File1.List(i - 1)
                Else
                    Kill File1.Path & "\" & File1.List(i - 1)
                End If
            End If
        Next i
        
    End Sub
      

  8.   

    刚才的程序有问题,看看下面的!Private Sub Command1_Click()
        
        File1.Path = "your folder name(abc)"
        
        Dim a() As String
        Dim Have_TM As Boolean
        Dim i As Long, j As Long
        ReDim a(j) As String
        For i = 1 To File1.ListCount
            Have_TM = False
            For j = 0 To UBound(a)
                If a(j) = File1.List(i - 1) Then
                    Have_TM = True
                    Kill IIf(Right$(File1.Path, 1) = "\", File1.Path & File1.List(i - 1), _
                            File1.Path & "\" & File1.List(i - 1))
                    Exit For
                End If
            Next j
                
            If Have_TM = False Then
                a(j) = File1.List(i - 1)
                j = j + 1
                ReDim Preserve a(j) As String
            End If
            
        Next i
        
    End Sub
      

  9.   

    大致思路:先得到目录下的文件名列表,创建临时目录。进行筛选,将要保留的文件复制到临时目录,删除原目录,目录拷贝,删除临时目录。代码如下:Private Sub Command1_Click()
        On Error Resume Next
        Dim FSO As New FileSystemObject
        Dim mfolder As Folder
        Dim mfile As File
        Dim i As Long
        i = 0
        Dim mfilelist() As String
        Set mfolder = FSO.GetFolder("c:\mc\abc\")'改成你自己的路径,下同
        For Each mfile In mfolder.Files
            ReDim Preserve mfilelist(i)
            mfilelist(i) = mfile.Name
            i = i + 1
        Next
        MsgBox mfilelist(i - 1)
        Dim tempdir As String
        tempdir = "c:\mytesttemp"
        Set mfolder = FSO.CreateFolder(tempdir)
        
        Dim usedic As New Dictionary
        Dim usefilelist() As String
        Dim j As Long
        j = 0
        Dim temps As Variant
        Dim maxnum As Double
        For i = 0 To UBound(mfilelist)
            temps = Split(mfilelist(i), ".")
            If usedic.Exists(temps(1)) = True Then
                If CDbl(temps(2)) > CDbl(usedic(temps(1))) Then
                usedic(temps(1)) = temps(2)
                End If
            Else
                usedic.Add temps(1), temps(2)
            End If
        Next
        ReDim usefilelist(usedic.Count - 1)
        Dim mykey As Variant
        Dim myitem As Variant
        mykey = usedic.Keys
        myitem = usedic.Items
        For i = 0 To usedic.Count - 1
        
            usefilelist(i) = "mmm." + mykey(i) + "." + myitem(i) + ".com"
            FileCopy "c:\mc\abc\" + usefilelist(i), tempdir + "\" + usefilelist(i)
            Debug.Print usefilelist(i)
        Next
        FSO.DeleteFolder "c:\mc\abc"
        FSO.CopyFolder tempdir, "c:\mc\abc", True
        FSO.DeleteFolder tempdir
        Set FSO = Nothing
        Set mfolder = Nothing
        Set mfile = Nothing
    End Sub
      

  10.   

    明白你的意思了,就是说在日期最新的文件中,仍然有重复的,是不是?先用我的代码删除掉指定日期之前的文件,然后对剩下的文件做比较,有重复的则删除。文件的比较有多种方式,我还没想到最好的一种,如果文件不大,这里有个简单的方法。
    dim bytFile1()as byte
    dim bytFile2()as byte
    先判断文件大小是否一致,不一致则都保留(肯定不是重复文件),否则做如下判断。
    将要比较的文件通过OPEN,Get等分别读取到bytFile1,bytFile2中,使用循环进行判断。
    for i=0 to ubound(bytfile1)-1
       if bytfile1(i)<>bytfile2(i) then
          exit for
       end if
    next
    if i>ubound(bytfile1)-1 then
       '两个文件相同,删除其中一个文件
    end if
    你试试吧,方法肯定是没错的,具体执行的效率可能不高。