我对PS相当陌生:我正在从多个xml文件($ABB(中提取字段。 $net var 基于模式搜索,并在第 2 行返回一个非静态子字符串。这是我到目前为止所拥有的:
$ABB = If ($aa -eq $null ) {"nothing to see here"} else {
$count = 0
$files = @($aa)
foreach ($f in $files)
{
$count += 1
$mo=(Get-Content -Path $f )[8].Substring(51,2)
(Get-Content -Path $f | Select-string -Pattern $lf -Context 0,1) | ForEach-Object {
$net = $_.Context.PostContext
$enet = $net -split "<comm:FieldValue>(d*)</comm:FieldValue>"
$enet = $enet.trim()}
Write-Host "$mo-nti-$lf-$enet" "`r`n"
}}
输出如下所示:03-nti-260- 8409。 请注意 8409 前面的空格,它对应于$net变量。我无法自己解决这个问题,我的方法可能都是错误的。我愿意接受任何和所有建议。感谢您的帮助。
由于$net = $_.Context.PostContext
之后的第一行$net
中的第一个字符包含拆分字符,因此空行将作为输出的第一个元素输出。然后,当您字符串化输出时,每个拆分的输出项都由一个空格连接。
您需要选择不为空的行:
$enet = $net -split "<comm:FieldValue>(d*)</comm:FieldValue>" -ne ''
解释:
-Split
未被()
包围的字符将从输出中删除,剩余的字符串将从每个匹配字符中拆分为多个元素。当匹配的字符开始或结束字符串时,将输出一个空行。如果不需要这些行,则必须注意删除它们。Trim()
将不起作用,因为Trim()
适用于单个字符串而不是数组,并且不会删除空字符串。
将-ne ''
添加到命令末尾,将删除空行。它只是一个内联布尔条件,当应用于数组时,只输出条件为真的元素。
您可以在下面看到空行条件的示例:
123 -split 1
23
123 -split 1 -ne ''
23
只需使用 -replace 即可删除任何空格 例如:
'03-nti-260- 8409' -replace 's'
<#
# Results
03-nti-260-8409
#>