【问题标题】:Renaming Multiple XML files using VBScript使用 VBScript 重命名多个 XML 文件
【发布时间】:2014-01-14 21:58:07
【问题描述】:

我有一个充满 XML 档案的目录。 大概有 400 个 XML,我需要使用 VBScript 使用它们上存在的数据重命名它们中的每一个。

我已经编写了一些可以运行的代码,但仍然遇到问题:

@EDIT -> 已解决。我找到了一个“替换”功能。谢谢,埃克哈德!

  • 我用于重命名文件的某些节点值包含非法字符(更准确地说是“/”),这导致 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

【问题讨论】:

  • 第 32 行似乎是 End If。你能标出这条线吗?

标签: xml xpath vbscript xml-parsing


【解决方案1】:

下一次,请明确指出问题/错误:错误编号、错误描述、行(不是按编号,而是引用来源)。

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

FSO.MoveFile nomeErrado, nomeCerto

是罪魁祸首。最相似的原因是:一个名为 nomeCerto 的文件已经存在。一种补救措施可能是:检查目标文件是否存在,如果存在,请在名称后附加一个数字。另一个:检查您的 XPath 是否失败(并且 Operadora 被“重用”),如果是,请记录事实并且不要重命名文件。

更新:

我试图提出一个导致 .MoveFile 抛出“找不到路径错误”的场景。当您遍历 .Files 集合并使用文件的 .Path 来指定 .MoveFile 的源时,很难看出如何找不到源路径。同样适用于目标路径:无论您还是 FSO 的默认设置都指定了文件的移动位置 - 如果某些文件的操作成功,那么肯定也应该找到讨厌的目标路径。

我的第一步是获取一些成功和一些失败(源)文件的列表。坏的有明显的特点吗?比如有趣的字母(-> 编码)或属性(-> 权限)?

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

MsgBox "|" & nomeCerto & "|"

也许 Operadora 包含使 nomeCerto 非法的材料(空格、\、/,请自行想象)。

【讨论】:

  • 我编辑了我的帖子,很抱歉忘记了这一点。这是一个“找不到路径”错误:/
  • 我在这里测试它。目录中没有名为“nomeCerto”的文件。我无法理解您所说的“检查您的 XPath 是否失败(并且 Operadora 是否被“重用”),如果是这样,请记录事实并且不要重命名文件。”......我应该使用“nomeCerto =” IR21 - "& Operadora & ".xml"" 有完整路径?
  • 我找不到一种模式来理解它为什么有时会起作用。它重命名了一些文件,没有重命名一些文件并表示“找不到路径”错误,现在
  • @CharlieVelez 我认为 Ekkehard.Horner 暗示的是:当您当前正在处理的 XML 文件不包含与您的 XPath 表达式 (//OrganisationInfo/OrganisationName) 匹配的节点时,变量 operadora保留 previous 循环周期的值。因此,MoveFile 语句试图覆盖您之前移动的文件,因此失败。
  • @Ekkehard.Horner,你能告诉我你的解决方案是什么吗?我无法理解“检查您的 XPath 是否失败”的意思...如果我在 MoveFile 之后更改“Operadora”值,我不会否认这个问题吗?我仍然看不出有什么问题:/
【解决方案2】:

将你的移动文件行改为这个;

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

【讨论】:

  • "nomeErrado" 是完整路径,因此再次附加文件名无济于事。
  • 还是同样的问题...找不到路径:/
  • 尝试将 wscript.echo 添加到每个路径名,看看它们是否是您所期望的。
猜你喜欢
  • 2020-04-03
  • 2011-09-10
  • 2021-08-27
  • 2021-02-20
  • 2013-06-12
  • 1970-01-01
  • 2012-05-01
相关资源
最近更新 更多