无法将内容放入带有换行符的文本文件中

时间:2019-01-02 13:03:12

标签: powershell

我正在使用out-file将内容发送到文本文件,尽管它通常会在每行之间插入换行符,但在这种情况下不会发生这种情况。

输出如下:

appleballcountry

我期望它会是如下

apple
ball 
country

下面是我正在使用的代码段,请忽略变量(因为这只是一个正在进行的工作)。

foreach ($li in $bin) {
    $list2 = $list1 | Where-Object {$_ -like $li}
    #$list2 #| out-file info2.txt
    foreach ($li2 in $list2) {
        $li3 += $li2 | where-object {$_ -like $li -and $_ -like "*Error*"} 
        $li3 | out-file info2.txt # it's this part that I am not able to get to 
        #the text file with line breaks
        break
    }        
}

我一般只是从Powershell和堆栈溢出开始,并且意识到我可能不会在此处提供全部信息。

此外,由于不确定如何提供,我目前无法提供Powershell版本。

2 个答案:

答案 0 :(得分:0)

您的问题不是out-file,而是您的$li3 string

当您执行+=时,PowerShell会将单词混在一起,而不会将它们视为单独的对象。

您可以做的是将where-object添加到foreach语句中,然后手动分配新行。

foreach ($li in $bin)
{
$list2 = $list1 | Where-Object {$_ -like $li}
foreach ($li2 in $list2 | Where-Object {$_ -like $li -and $_ -notlike "Error"})
{
$li3 += $li2 + "`r`n"
$li3 | out-file info2.txt
break
}
}

out-file移出循环也是一个好主意。

答案 1 :(得分:0)

使用+=运算符时,您同时连接了字符串$li3$li2

PS C:\temp> $string1 = "new"
PS C:\temp> $string2 = "year"
PS C:\temp> $string1 += $string2
PS C:\temp> $string1
newyear

我在这里为您的foreach循环找到了两种选择:

您只需将Option1附加到文本文件中即可

foreach ($li2 in $list2 | Where-Object {$_ -like $li -and $_ -notlike "Error"})
{
  $li2 | Out-File -Append info2.txt
}

选项2,如果您需要一个对象:

$li3 = New-Object System.Collections.Generic.List[System.String]
foreach ($li2 in $list2 | Where-Object {$_ -like $li -and $_ -notlike "Error"})
{
  $li3.Add($li2)
}
$li3 | Out-File info2.txt

您的代码逻辑可能会得到改善,您在$li上进行了两次过滤:

$list2 = $list1 | Where-Object {$_ -like $li}
foreach ($li2 in $list2 | Where-Object {$_ -like $li -and $_ -notlike "Error"})