2015-09-24 83 views
0

我有下面的XML文件和文件file1.txtfile2.txtfile3.txtfile4.txtfile5.txt不同的位置...將文件複製到依賴於信息從XML文件

<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:\根據不同的操作系統上?這些文件中的每個文件位於不同的位置,具有不同的名稱,具體取決於操作系統?

更新時間:

我已經加入到腳本

新建項目 - 類型目錄 「C:\ WINDOWS 7」 的開始;

新項目類型目錄「c:\ Windows Server 2012」;

然而,這些文件拷貝到通訊錄文件夾中,我怎樣才能在xml中使用字段「版本」來創建這些文件夾。使用它的值作爲文件夾本身的名稱?

回答

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] 
} 
+0

我怎麼能創建目錄「 C:\ some \ where \ win7「如果不存在?我曾嘗試添加-Force,但似乎沒有工作.. – AutDev

+0

@AutDev如有疑問,請閱讀[文檔](https://technet.microsoft.com/en-us/library/hh849795.aspx)。文件夾可以通過「New-Item-Type Directory」來創建。 –