长话短说,我想在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
}
它将生成一个包含所有结果的文件,并添加一个新行'处理完每个文件后,使文件更易于翻转。
感谢您的帮助!
答案 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
}