删除文件名后的文件-vbscript

删除文件名后的文件-vbscript,vbscript,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 文件_000005_FULL.ZIP之前的所有内容都将被删除。这些文件是使用工

基本上,我正在尝试编写一个脚本来删除特定文件名后的文件,因此基于下面的文件列表

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
文件_000005_FULL.ZIP之前的所有内容都将被删除。这些文件是使用工具创建的,并将按文件名排序,所以首先是最大的数字。基本上需要保存2个最新的完整文件以及它们之间的增量(如果有)。我希望这是有道理的

到目前为止,这就是我所拥有的,但只是不断循环,而不仅仅是直到它找到最新的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
Dim fso、文件夹、文件、ToDel、sfolder
设置fso=CreateObject(“Scripting.FileSystemObject”)
sFolder=(“C:\MDS”)
设置ToDel=fso.CreateTextFile(“C:\MDS\FileList.txt”,True)
Set folder=fso.GetFolder(sFolder)
set files=folder.files
对于文件中的每个文件夹DERIDX
ToDel.WriteLine(folderidx.Name)
下一个
托德尔.克洛斯
Dim arrFileLines()
i=0
设置ObjFile=FSO.OpenTextFile(“C:\MDS\FileList.txt”,1)
直到objFile.AtEndOfStream
Redim文件行(i)
arrFileLines(i)=objFile.ReadLine
i=i+1
环
ObjFile.Close
s=0
当s<2时执行此操作
对于l=Ubound(arrFileLines)到LBound(arrFileLines)步骤-1
对于文件行中的每条strLine
如果仪表(斯特林,“满”)为0,则
wscript.echo“已满!!!!”
wscript.echo strLine,s
s=s+1
如果结束
下一个
下一个
环
我的想法是从文本文件中删除行,然后使用此文本文件从目录中删除文件


希望这一切都是有意义的,有人可以传递一些建议

您应该能够通过文件夹进行两次迭代,而无需使用文本文件。在第一次传递过程中,记录分配给两个最新完整的编号。然后,在第二个过程中,删除所有小于第二个最高满度的文件

下面是它的外观:

' 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
'第一次通过:查找两个最新的完整。。。
对于FSO.GetFolder(“c:\mds”).Files中的每个文件
“这是满的吗?
如果正确(File.Name,8)=“FULL.ZIP”,则
'从文件名中获取数值(从pos 6开始的6位数字)。。。
intNum=CLng(Mid(File.Name,6,6))
'保持两个最新的完整。。。
如果intNum>intMax1,则
intMax2=intMax1
intMax1=intNum
ElseIf intNum>intMax2然后
intMax2=intNum
如果结束
如果结束
下一个
'第二次传递:删除第二次最新完整传递之前的任何内容。。。
对于FSO.GetFolder(“c:\mds”).Files中的每个文件
intNum=CLng(Mid(File.Name,6,6))
如果intNum
看起来不错,但在第28行第5行的intNum=CLng(Mid(File.Name,6,6))的第二个命令中似乎出现了错误。错误是类型不匹配:Clng。为了简单起见,我没有在这里进行任何错误检查。您的文件夹中可能有一个文件的名称与其他文件不同,因此其文件名中没有从chars 6到11的数值。确保所有文件都按照规范命名(
FILE########u FULL/DELTA.ZIP
),并添加一些错误检查。例如,测试它是否以“
文件”
”开头,并以“
.ZIP
”结尾。将字符6-11提取为字符串,并使用
IsNumeric()
测试该字符串,然后使用
CLng()
转换为数字。如果您需要任何帮助,请告诉我。似乎脚本没有运行,请在初始intNum命令之后放置wscript.echo intNum命令,脚本运行但不输出任何内容?是否还需要声明其他变量?设置fso=CreateObject(“Scripting.FileSystemObject”)Dim intNum、intMax2、intmax1您是否在错误恢复下一步时声明了
?如果你这样做了,禁用它,它会告诉你你是否还没有声明任何变量(假设你也声明了
Option Explicit
)。邦德,很抱歉一直问这个问题,但我还是想弄清楚。脚本读取文件,但IF语句似乎没有执行。已尝试在每个点上放入wscript.echo命令,但未放入任何输出。甚至将Right(File.Name,8)更改为Right(Lcase(File.Name),8),因为这样可能会导致问题。有什么想法吗?