带有额外换行的字符串
String coming with an extra new line
下面是我从文本文件中获取服务器名称并用逗号连接的代码。
但是当我打印该值时,它会在值之后额外换行。
我试过 $erversToReboot.Trim()
,但没用。
$ServerList = Get-Content "D:\ServerName.txt"
$Servers=""
foreach($Server in $ServerList)
{
$Servers += $Server + ","
}
[string]$ServersToReboot= $Servers.TrimEnd(",")
输出为
server1,server2
---one extra line here---
请告诉我这里出了什么问题。
据我所知,您正试图用逗号分隔您的服务器。我会自己跳过 Foreach 构造并简单地使用连接运算符。
$ServerList = Get-Content -Path 'D:\ServerName.txt'
$ServerList -join ','
这也可以在一条语句中完成。
$ServerList = (Get-Content -Path 'D:\ServerName.txt') -join ','
汤米
正如其他人指出的那样,使用 -join
运算符将输入行与可指定的分隔符连接起来通常要简单得多。
至于多出一个空行的问题:Gert Jan Kraaijeveld 振振有词的是你的输入文件末尾多了一个空行,同时注意到实际上不是 你发布的代码会发生什么,应该可以正常工作(尽管效率低下)。
也许额外的一行是您如何打印结果值的人为因素。
回答相关问题如何忽略输入文件中的空行:
假设可以简单地从输入中删除 all 个空行,最简单的 PowerShell 惯用解决方案是:
@(Get-Content D:\ServerName.txt) -ne '' -join ','
@(Get-Content D:\ServerName.txt)
returns 作为字符串数组[1] 的输入行,来自
-ne ''
然后删除空行,其结果 -join
与分隔符 ,
连接
[1] Get-Content D:\ServerName.txt
会 return 一个 标量 (单个字符串),如果输入文件碰巧只包含 1 行,因为 PowerShell 通常将 单个 输出对象 报告为自身 而不是 单元素数组 当管道输出被收集.
因此,@(...)
数组子表达式运算符 - 而不仅仅是 (...)
- 在上述命令中是必需的:它确保 Get-Command
的输出被视为 array,因为 -ne
运算符与 scalar LHS 和 returns a Boolean[=66= 的行为不同] 而不是过滤 LHS 的元素:比较 'foo' -ne ''
到 @('foo') -ne ''
.
相比之下,如果您将结果(直接)传递给 -join
(这只是一个 no-op 标量 LHS):
(Get-Content D:\ServerName.txt) -join ','
下面是我从文本文件中获取服务器名称并用逗号连接的代码。 但是当我打印该值时,它会在值之后额外换行。
我试过 $erversToReboot.Trim()
,但没用。
$ServerList = Get-Content "D:\ServerName.txt"
$Servers=""
foreach($Server in $ServerList)
{
$Servers += $Server + ","
}
[string]$ServersToReboot= $Servers.TrimEnd(",")
输出为
server1,server2
---one extra line here---
请告诉我这里出了什么问题。
据我所知,您正试图用逗号分隔您的服务器。我会自己跳过 Foreach 构造并简单地使用连接运算符。
$ServerList = Get-Content -Path 'D:\ServerName.txt'
$ServerList -join ','
这也可以在一条语句中完成。
$ServerList = (Get-Content -Path 'D:\ServerName.txt') -join ','
汤米
正如其他人指出的那样,使用 -join
运算符将输入行与可指定的分隔符连接起来通常要简单得多。
至于多出一个空行的问题:Gert Jan Kraaijeveld 振振有词的是你的输入文件末尾多了一个空行,同时注意到实际上不是 你发布的代码会发生什么,应该可以正常工作(尽管效率低下)。
也许额外的一行是您如何打印结果值的人为因素。
回答相关问题如何忽略输入文件中的空行:
假设可以简单地从输入中删除 all 个空行,最简单的 PowerShell 惯用解决方案是:
@(Get-Content D:\ServerName.txt) -ne '' -join ','
@(Get-Content D:\ServerName.txt)
returns 作为字符串数组[1] 的输入行,来自 -ne ''
然后删除空行,其结果 -join
与分隔符 ,
[1] Get-Content D:\ServerName.txt
会 return 一个 标量 (单个字符串),如果输入文件碰巧只包含 1 行,因为 PowerShell 通常将 单个 输出对象 报告为自身 而不是 单元素数组 当管道输出被收集.
因此,@(...)
数组子表达式运算符 - 而不仅仅是 (...)
- 在上述命令中是必需的:它确保 Get-Command
的输出被视为 array,因为 -ne
运算符与 scalar LHS 和 returns a Boolean[=66= 的行为不同] 而不是过滤 LHS 的元素:比较 'foo' -ne ''
到 @('foo') -ne ''
.
相比之下,如果您将结果(直接)传递给 -join
(这只是一个 no-op 标量 LHS):
(Get-Content D:\ServerName.txt) -join ','