我有以下XML文件和文件file1.txt
,file2.txt
,file3.txt
,file4.txt
,file5.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中。使用其值作为文件夹本身的名称?
答案 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]
}