Scénario - OutFolder contient des fichiers XML qui sont nommés par leurs datetime créés (comme 20140524110115, 20140524110120, 20140524110122 et ainsi de suite). Je souhaite renommer ces fichiers en fonction de leur ID et de leur valeur Action (et vérifier également les doublons).Le fichier FSO renommer le code en cours d'exécution deux fois
Problème - Lorsque j'exécute le code suivant, la boucle s'exécute deux fois plus de fois que le nombre de fichiers dans le dossier. Actuellement, le dossier contient 67 fichiers et la boucle est exécutée 134 fois. Par conséquent, les fichiers sont renommés comme
ID11_New_2.xml ID11_Used_2.xml ID12_New_2.xml ID12_Sold_2.xml ... and so on
Je me attendais
ID11_New_1.xml ID11_Used_1.xml ID12_New_1.xml ID12_Sold_1.xml ... and so on
Pourquoi la boucle est en cours d'exécution deux fois?
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
C'est une bonne règle générale de ne pas modifier le contenu d'un ensemble d'objets tout en faisant des itérations sur ceux-ci. Placez d'abord les noms des fichiers sources dans une collection, puis traitez-les. –