FSO文件重命名代码运行两次

时间:2014-05-25 12:42:32

标签: vba excel-vba vbscript file-rename filesystemobject

场景 - OutFolder包含以其创建的日期时间命名的XML文件(如20140524110115,20140524110120,20140524110122等)。我想根据它们的ID和Action标记值重命名这些文件(并检查重复项)。

问题 - 当我运行以下代码时,循环运行的次数是文件夹中文件数的两倍。目前,该文件夹包含67个文件,循环运行134次。因此文件被重命名为

ID11_New_2.xml
ID11_Used_2.xml
ID12_New_2.xml
ID12_Sold_2.xml
... and so on

我在期待

ID11_New_1.xml
ID11_Used_1.xml
ID12_New_1.xml
ID12_Sold_1.xml
... and so on

为什么循环运行两次?

Sub Test(OutFolder)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
    xmlDoc.SetProperty "SelectionLanguage", "XPath"
    xmlDoc.Async = False
    Set objFiles = objFSO.GetFolder(OutFolder).Files
    i = 1

    For Each FileXML In objFiles
        Debug.Print i
        xmlDoc.Load (FileXML.Path)
        Set varID = xmlDoc.GetElementsByTagName("Id")
        Set varAction = xmlDoc.GetElementsByTagName("Action")
        If varID.Length > 0 And varAction.Length > 0 Then 'if file is of correct format
            FileCtr = 1
            varFileName = varID(0).Text & "_" & varAction(0).Text & "_" & FileCtr & ".xml"
            'check for duplicates
            While objFSO.FileExists(objFSO.BuildPath(OutFolder, varFileName))
                varFileName = varID(0).Text & "_" & varAction(0).Text & "_" & FileCtr & ".xml"
                FileCtr = FileCtr + 1
            Wend
            'FileXML.Name = varFileName
            With objFSO
                .MoveFile .BuildPath(FileXML.ParentFolder, FileXML.Name), .BuildPath(FileXML.ParentFolder, varFileName)
            End With
        End If
        i = i + 1
    Next
End Sub

1 个答案:

答案 0 :(得分:0)

While objFSO.FileExists(objFSO.BuildPath(OutFolder, varFileName))
    FileCtr = FileCtr + 1
    varFileName = varID(0).Text & "_" & varAction(0).Text & "_" & FileCtr & ".xml"
Wend

并不确定您测试重复项的文件夹是否正确(我不知道文件夹包含哪些内容),但可能在第一行中您需要使用{{1}更改OutFolder }}