我正在使用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版本。
答案 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"})