2015-08-17 63 views
0

我試圖用Get-ChildItem命令替換XML中的某些文件名。 XML中有6個文件名,每個文件夾中有6個文件。我所要做的就是用Get-ChildItem命令替換XML中的文件名 如果有幫助,文件名總是加1。所以,我有以下幾點:使用Get-ChildItem命令替換XML中的文件名

Get-ChildItem $dirname\resources\* -filter *.txt -recurse 

哪還給6文件名。當我選擇一個XML節點時,這也會返回6個文件名。

$xml.SelectNodes('//FileName',$XmlNSManager) 

如何從Get-ChildItem命令同步替換XML中的每個文件名?即

12341_1.txt --> 100011.txt, 
12341_2.txt --> 100012.txt, 
12341_3.txt --> 100013.txt, 

等等。

回答

1

如果我明白你的問題正確這樣的事情應該工作:

$files = Get-ChildItem $dirname\resources\* -Filter *.txt -Recurse | 
     select -Expand Name | sort 

$i = 0 
$xml.SelectNodes('//FileName', $XmlNSManager) | % { 
    $_.'#text' = [string]$files[$i] 
    $i++ 
} 
+0

這給了我 無法設置「#text」,因爲只有字符串可以被用作值來設置的XmlNode性質的錯誤。 在線:6 char:3 + $ _。'#text'= $ file [$ i] + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [],SetValueException + FullyQualifiedErrorId:XmlNodeSetShouldBeAString – s4ndz

+0

只是試圖解釋一點。 $ xml.SelectNodes( '//文件名',$ XmlNSManager)返回 #text ----- 8429006775491_01_01.txt 8429006775491_01_02.txt 8429006775491_01_03.txt 8429006775491_01_04.txt 8429006775491_01_05.txt 8429006775491_01_06.txt 我想用 替換這些文件名$ files = Get-ChildItem $ dirname \ resources \ * -Filter * .txt -Recurse | select -Expand Name |排序 – s4ndz

+0

@ s4ndz查看更新的答案。另一種方法是將文件名列表定義爲字符串數組('[string []] $ files = Get-ChildItem ...')。不知道爲什麼需要額外的轉換,因爲數組元素應該已經是字符串了。 –

相關問題