使用Powershell从位于不同文件夹中的xml文件创建逗号分隔的文本文件

时间:2013-01-27 09:57:37

标签: xml powershell

在Windows 7 PC上,我试图从包含在几百个xml文件中的数据生成一个逗号分隔的文本文件。每个xml文件都包含在其自己唯一命名的文件夹中,但xml文件的每个实例都具有相同的文件名“report.xml”

更清楚一点,文件夹/文件结构是这样的:

H:\Main_Folder\Folder_1\report.xml
H:\Main_Folder\Folder_2\report.xml
H:\Main_Folder\Folder_3\report.xml
...

xml文件包含大量数据,但我只对几个数据项感兴趣,这几个数据项恰好是测量数据。最终,我想要的输出是一个文本文件,它将为每个文件夹列出文件夹名称和xml文件中的两个测量值:

folder_1 , measurement_1 , measurement_2
folder_2 , measurement_1 , measurement_2
folder_3 , measurement_1 , measurement_2
...

在任何文件夹中,我都可以使用以下PowerShell代码从单个xml文件中获取所需的值:

$xml = [xml](get-content report.xml)
$xml.Measurement[0].Value.'#text' + " , " + $xml.Measurement[1].Value.'#text'

上面的代码返回:

measurement_1 , measurement_2

此外,我可以浏览每个文件夹并使用以下PowerShell代码输出文件夹名称:

PS H:\Main_Folder> Get-ChildItem Report.xml -Recurse | Split-Path -parent

执行时,这给了我:

folder_1
folder_2
folder_3
...

我需要一些帮助来弄清楚如何让所有这些共同工作以生成我想要的文本文件。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

类似这样的事情

ls h:\main_folder -filter "report.xml" -recurse|%{
    [xml]$xml=gc $_.FullName
    $_.DirectoryName+","+$xml.Measurement[0].Value.'#text' + " , " + $xml.Measurement[1].Value.'#text' |out-file c:\temp\output.csv -Append
}