场景 - 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
答案 0 :(得分:0)
While objFSO.FileExists(objFSO.BuildPath(OutFolder, varFileName))
FileCtr = FileCtr + 1
varFileName = varID(0).Text & "_" & varAction(0).Text & "_" & FileCtr & ".xml"
Wend
并不确定您测试重复项的文件夹是否正确(我不知道文件夹包含哪些内容),但可能在第一行中您需要使用{{1}更改OutFolder
}}