根据XML文件中的信息将文件复制到不同的位置

时间:2015-09-24 13:52:18

标签: xml powershell

我有以下XML文件和文件file1.txtfile2.txtfile3.txtfile4.txtfile5.txt ......

<Oses>
    <OS>
        <Name>Windows 7</Name>
        <Version>6.1</Version>
        <File>file1.txt</File>
        <File>file2.txt</File>
    </OS>
    <OS>
        <Name>Windows Server 2012</Name>
        <Version>6.2</Version>
        <File>file3.txt</File>
        <File>file2.txt</File>
    </OS>
    <OS>
        <Name>Windows Server 2012R2</Name>
        <Version>6.3</Version>
        <File>file4.txt</File>
    </OS>
    <OS>
        <Name>Windows 10</Name>
        <Version>10.0</Version>
        <File>file5.txt</File>
        <File>file6.txt</File>
        <File>file4.txt</File>
    </OS>
</Oses>

我能够像PowerShell一样阅读文档:

[xml]$XmlDocument = Get-Content -Path 'C:\Users\Desktop\New folder\test.xml'

现在的问题是,如何根据操作系统将这些文件复制到C:\内的新文件夹中?这些文件中的每个文件在不同的位置,具有不同的名称,具体取决于操作系统?

更新:

我已添加到脚本的开头

New-Item -Type Directory&#34; c:\ Windows 7&#34 ;;

New-Item -Type Directory&#34; c:\ Windows Server 2012&#34;;

文件会复制到相应的文件夹中,但是,如何使用字段&#34;版本&#34;创建这些文件夹。在xml中。使用其值作为文件夹本身的名称?

1 个答案:

答案 0 :(得分:2)

我建议定义一个将操作系统映射到目标文件夹的哈希表:

$dst = @{
  'Windows 7'             = 'C:\some\where\win7'
  'Windows Server 2012'   = 'C:\some\where\win2012'
  'Windows Server 2012R2' = 'C:\some\where\win2012r2'
  'Windows 10'            = 'C:\some\where\win10'
}

然后您可以像这样处理XML数据:

$XmlDocument.Oses.OS | ForEach-Object {
  $os = $_.Name
  $_.File | Copy-Item -Destination $dst[$os]
}