Powershell 使用out文件时避免换行

Powershell 使用out文件时避免换行,powershell,line-breaks,Powershell,Line Breaks,我在写一个PowerShell脚本,这让我有点沮丧 基本上,我在文本文件中循环,根据正则表达式模式数组检查每一行。 结果通过管道传输到out-file cmdlet,该cmdlet将其附加到另一个文本文件 Get-ChildItem $logdir -Recurse -Include @('*.txt') | Get-Content | ForEach-Object { Select-String $patterns -InputObject $_ | Out-File $csvpath -A

我在写一个PowerShell脚本,这让我有点沮丧

基本上,我在文本文件中循环,根据正则表达式模式数组检查每一行。 结果通过管道传输到out-file cmdlet,该cmdlet将其附加到另一个文本文件

Get-ChildItem $logdir -Recurse -Include @('*.txt') | Get-Content | ForEach-Object { 
Select-String $patterns -InputObject $_ | Out-File $csvpath -Append -Width 1000 }
我的问题是,我无法从文件中删除它在$csvpath后面的文件中创建的额外换行符(每行后面三行)。 我可以使用.NET framework类实现同样的功能,但我更愿意使用纯PowerShell;-)

非常感谢您的帮助


Kevin

请记住,选择字符串输出MatchInfo对象,而不是字符串-如下命令所示:

gci $logdir -r *.txt | gc | select-string $patterns | format-list *
您要求在输出到文件之前将MatchInfo对象隐式呈现为字符串。出于某种原因,我不明白,这会导致输出额外的空行。您可以通过指定只希望将Line属性输出到文件来解决此问题,例如:

gci $logdir -r *.txt | gc | select-string $patterns | %{$_.Line} | 
    Out-File $csvpath -append -width 1000

为什么不使用
添加内容

gci $logdir -rec *.txt | gc | select-string $pattern | add-content $csvpath

您不需要指定宽度和
-append
开关,默认情况下文件大小不会增加一倍(尽管您可以指定编码),而且看起来像您这样的空行没有问题。

foreach{Select String-InputObject$}
?为什么不直接插入
Select String
;请注意如何减少那里的命令混乱。很高兴提供帮助;)这是可行的,但一般来说,格式化某些对象可能很棘手。在这种情况下,我想对每个
MatchInfo
对象调用
ToString()
。对于许多其他类型,
ToString()
只返回一个类型名(没有有用的信息)。然后,正如基思建议的那样,需要指定具体属性。