【问题标题】:Create folders based on values in multiple xml files and copy content into them根据多个 xml 文件中的值创建文件夹并将内容复制到其中
【发布时间】:2013-05-07 23:13:18
【问题描述】:

我很挣扎,想知道是否有人可以帮助我......

我有很多文件夹,每个文件夹中都有一个大的 xml 文件。我会通过我的文件夹递归并找到我的 xml 文件。一旦我有了这个 xml,我想从 xml 中提取一些值并在 Web 服务器上创建一个带有版本子文件夹的文件夹,然后从父文件夹复制一个 jpg 文件。到目前为止,我可以获得一个 xml 并返回一个字段的所有值,但无法让它根据该值创建文件夹。如果文件夹存在则脚本忽略会很好。我的 xml 看起来像这样......

数据

  • 资产

    • 部分
      • 版本“1”
      • 部件号“ABC123”
      • 汽车
        • 制作“福特”
        • 颜色“BLACK.JPG”
      • 汽车
        • 制作“法拉利”
        • 颜色“RED.JPG”

所以结果应该是这样的文件夹结构

ABC123\

   1\
     FORD\
          black.jpg
     FERRARI\
           red.jpg

抱歉帖子中的数据质量不佳,第一次发布,我无法让它工作

【问题讨论】:

    标签: xml powershell


    【解决方案1】:

    以下是可能的方法:

    $xml = [xml]@'
    <Data>
      <Asset>
        <Part version="1" partnumber="ABC123">
          <Car make="Ford" colour="Black.jpg"/>
          <Car make="Ferrari" colour="Red.jpg"/>
        </Part>
      </Asset>
    </Data>
    '@
    
    $xmlPath = "C:\foo"
    $pathRoot = "\\server\share\"
    foreach ($part in $xml.Data.Asset.Part)
    {
        $dir = $part.partnumber
        mkdir $pathRoot\$dir -WhatIf
        foreach ($car in $part.Car)
        {
            $dir = Join-Path $dir $car.make
            mkdir $pathRoot\$dir -WhatIf
            $colour = $car.colour
            Copy-Item $xmlPath\$dir\$colour $pathRoot\$dir\$colour -WhatIf
        }
    }
    

    $xmlPath 将指向包含 xml 文件的目录。我认为您可以从那里复制 jpg 文件。

    【讨论】:

    • 谢谢基思,你能解释一下为什么你把带有xml内容的@'放在它后面吗?我还希望它递归地查找 xml 文件。到目前为止,这看起来真的很好。感谢所有的努力:)
    • 这被称为here string,它用于创建跨越多行的字符串。使用 Get-ChildItem 递归查找 xml 文件很容易,例如Get-ChildItem &lt;root-path&gt; -recurse *.xml.
    • 感谢您回复我,我是否需要将此位添加到我的脚本中 $xml = [xml]@' '@跨度>
    • 没有。这只是我认为您的 XML 文件内容的示例。您需要像 $xml = [xml](Get-Content &lt;path-to-xml-file&gt;) 那样读入您的实际 XML 文件。
    猜你喜欢
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多