如何分离每个已处理文件的输出

时间:2017-05-24 06:38:51

标签: powershell

长话短说,我想在Powershell中找到一种方法来完成以下任务。

我必须处理大量XML文件并针对特定的XSD验证它们。 输出(详细)必须存储在单独的文件中,每个文件包含已处理文件的名称。 经过大量的研究,我似乎无法找到问题的答案,所以我们就是这样。

这是设置:

FileABC.xml
File123.xml
FileA1B2C3.xml

到目前为止我的剧本

$files = Get-ChildItem C:\path\to\files\*.xml
$VerbosePreference = "continue"


foreach ($file in $files) {
Test-Xml $file -SchemaPath '.\Magnet.xsd' -Verbose | Out-File -FilePath "${file}.txt"
}

当我执行上面的脚本时,我在命令行中得到了详细输出,没有单独的文件。

如果我执行以下

$files = Get-ChildItem C:\path\to\files\*.xml
$VerbosePreference = "continue"


foreach ($file in $files) {
Test-Xml $file -SchemaPath '.\Magnet.xsd' -Verbose *>> output.txt
}

然后我在一个大文件中获得了我需要的所有输出但没有文件名。这使文件不可读。

有人能指出我正确的方向吗?

$files = Get-ChildItem C:\path\to\files\*.xml
$VerbosePreference = "continue"


foreach ($file in $files) {
  ( $(Test-Xml $file -SchemaPath '.\Magnet.xsd' -Verbose),
    "--- $($file.FullName) ---",
    "`n"
  ) *>> output.txt
}

它将生成一个包含所有结果的文件,并添加一个新行'处理完每个文件后,使文件更易于翻转。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

将数组重定向到output.txt,例如如下

foreach ($file in $files) {
  ( '---',                          <# separator #>
    $file.FullName,                 <# file identification #>
    $(Test-Xml $file -SchemaPath '.\Magnet.xsd' -Verbose)
  ) *>> output.txt
}

foreach ($file in $files) {
  ( 
    "--- $($file.FullName) ---",     <# separator AND file identification in one line #>
    $(Test-Xml $file -SchemaPath '.\Magnet.xsd' -Verbose)
  ) *>> output.txt
}