使用VBScript重命名多个XML文件

时间:2014-01-13 13:49:35

标签: xml xpath vbscript xml-parsing

我有一个充满XML档案的目录。 类似400 XML的东西,我需要使用VBScript将它们中的每一个重命名为它们。

我已经完成了一些功能正常但仍有问题的代码:

@EDIT - >解决了。我找到了“替换”功能。谢谢,Ekkehard!

  • 我用于重命名文件的某些节点值具有非法字符(更准确地说是“/”),这使得VBScript无法保存它,返回“找不到路径”错误。在使用它重命名文件之前,如何为每个“Operadora”值设置更改每个“/”(如果它们存在于变量中假定的当前Operadora中)?我会把它改成“ - ”。

以下是代码:

Dim Caminho
Dim FSO
Dim FLD
Dim fil
Dim nomeErrado
Dim nomeCerto
Dim xmlDoc
Dim OrganisationInfo, Operadora, recentDate, resultOperadora

Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") 'Msxml2.DOMDocument / Microsoft.XMLDOM   
xmlDoc.Async = "False"
xmlDoc.setProperty "SelectionLanguage", "XPath"

Caminho = "C:\Users\f8057612\Desktop\Bancos\Script_Operadoras"

Set FSO = CreateObject("Scripting.FileSystemObject")        'Create the instance of the FSO
Set FLD = FSO.GetFolder(Caminho)                            'Set the folder you want to search. NOTE - some antivirus may not like this

For Each fil in FLD.Files
    If LCase(FSO.GetExtensionName(fil)) = "xml" Then
        xmlDoc.Load fil.Path
        nomeErrado = fil.Path

        If xmlDoc.ParseError = 0 Then

            For Each OrganisationInfo In xmlDoc.SelectNodes("//OrganisationInfo/OrganisationName")
                Operadora = OrganisationInfo.Text
            Next

            resultOperadora = Replace(Operadora, "/", "-")

            nomeCerto = "IR21 - " & resultOperadora & " - " & ".xml"
            WScript.Echo "_" & nomeErrado & "_" & vbNewLine & "_" & nomeCerto & "_"

            FSO.MoveFile nomeErrado, nomeCerto

        End If
    End If
Next

Set FLD = Nothing
Set FSO = Nothing

2 个答案:

答案 0 :(得分:2)

下次请非正确地识别问题/错误:错误编号,错误说明,行(不是数字,而是通过引用来源)。

如果32是正确的行号,那么

FSO.MoveFile nomeErrado, nomeCerto

应该受到指责。最相似的原因是:名为nomeCerto的文件已经存在。一种补救措施可能是:检查目标文件是否存在,如果是,则在名称后附加一个数字。另一个:检查你的XPath是否失败(和Operadora是'重用'),如果是这样,请记录这个事实并且不要重命名该文件。

<强>更新

我尝试使用导致.MoveFile抛出“找不到路径错误”的方案。当你遍历.Files集合并使用文件'.Path来指定.MoveFile的源时,很难看到如何找不到源路径。同样适用于目标路径:您或FSO的默认值是否指定移动文件的位置 - 如果某些文件的操作成功,那么也应该找到讨厌目的地的路径。

我的第一步是获取一些成功和一些失败(源)文件的列表。是否存在明显的不良特征 - 如有趣的字母( - &gt;编码)或属性( - &gt;权限)?

然后我会使用MsgBox和分隔符显示变量nomeCerto的内容(对于讨厌的文件) - 例如。

MsgBox "|" & nomeCerto & "|"

也许Operadora包含使nomeCerto非法的材料(空白,\,/,使用你自己的想象力)。

答案 1 :(得分:0)

将您的移动文件行更改为此内容;

FSO.moveFile nomeErrado & "/" & fil.Name, nomeErrado & "/" & nomeCerto