文件名后删除文件 - vbscript

时间:2014-08-21 02:46:03

标签: vbscript

基本上我正在尝试编写一个脚本来删除某个文件名后的文件,所以根据下面的文件列表

FILE_000001_FULL.ZIP
FILE_000002_FULL.ZIP
FILE_000003_FULL.ZIP
FILE_000004_FULL.ZIP
FILE_000005_FULL.ZIP
FILE_000006_DELTA.ZIP
FILE_000007_DELTA.ZIP
FILE_000008_FULL.ZIP

将删除FILE_000005_FULL.ZIP之前的所有内容。文件是使用工具创建的,将按文件名排序,因此最高编号。基本上需要保留2个最新的FULL文件和它们之间的DELTA(如果有的话)。我希望这是有道理的。

到目前为止,这就是我所拥有的,但只是不断循环,而不仅仅是找到最新的2个。

Dim fso, folder, files, ToDel, sfolder
Set fso = CreateObject("Scripting.FileSystemObject")
sFolder = ("C:\MDS")
Set ToDel = fso.CreateTextFile ("C:\MDS\FileList.txt", True)
Set folder = fso.GetFolder(sFolder)
set files = folder.files


For each folderIDX In files
    ToDel.WriteLine(folderidx.Name)
Next

ToDel.close


Dim arrFileLines()
i = 0
Set ObjFile = FSO.OpenTextFile("C:\MDS\FileList.txt", 1)
Do Until objFile.AtEndOfStream
    Redim Preserve arrFileLines(i)
    arrFileLines(i) = objFile.ReadLine
    i = i + 1
Loop

ObjFile.Close
s = 0

Do While s < 2
For l = Ubound(arrFileLines) to LBound(arrFileLines) Step -1
    For Each strLine in arrFileLines
        IF InStr(strLine, "FULL") <> 0 Then
        wscript.echo "Found Full!!!!"
        wscript.echo strLine, s
        s = S + 1
        End If

Next
Next
LooP

我的想法是删除文本文件中的行,然后使用此文本文件从目录中删除文件。

希望一切都有道理,有人可以传递一些建议!

1 个答案:

答案 0 :(得分:0)

您应该可以通过文件夹中的两次迭代执行此操作,而无需/使用文本文件。在第一次通过期间,记录分配给最近两个FULL的数字。然后,在第二次传递中,删除任何小于第二高FULL的文件。

以下是它的外观:

' First pass: Find the two latest FULLs...
For Each File In FSO.GetFolder("c:\mds").Files

    ' Is this a FULL?
    If Right(File.Name, 8) = "FULL.ZIP" Then

        ' Get the numeric value from the file name (6 digits starting as pos 6)...
        intNum = CLng(Mid(File.Name, 6, 6))

        ' Maintain the two latest FULLs...
        If intNum > intMax1 Then
            intMax2 = intMax1
            intMax1 = intNum
        ElseIf intNum > intMax2 Then
            intMax2 = intNum
        End If

    End If

Next

' Second pass: Delete anything prior to the second-latest FULL...
For Each File In FSO.GetFolder("c:\mds").Files

    intNum = CLng(Mid(File.Name, 6, 6))
    If intNum < intMax2 Then File.Delete

Next