【问题标题】:String coming with an extra new line带有额外新行的字符串
【发布时间】:2019-02-04 12:30:48
【问题描述】:

下面是我从文本文件中获取服务器名称并用逗号连接的代码。 但是当我打印该值时,它会在值之后附加一个新行。

我尝试过$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---

请让我知道这里出了什么问题。

【问题讨论】:

  • 尝试使用 $ServerList -join ',' 而不是半手动构建它。 [咧嘴]
  • 您的代码在我的机器上运行良好。我的猜测是您的输入文件末尾有一个空行。就像@tommymaynard 已经在他的回答中写道:使用 -join。如果有操作符,不要为它写循环和东西

标签: powershell newline


【解决方案1】:

据我所知,您正在尝试用逗号分隔您的服务器。我自己会跳过 Foreach 构造,只需使用连接运算符。

$ServerList = Get-Content -Path 'D:\ServerName.txt'
$ServerList -join ','

这也可以在单个语句中完成。

$ServerList = (Get-Content -Path 'D:\ServerName.txt') -join ','

汤米

【讨论】:

  • 一般来说绝对是正确的解决方案(尽管我们仍然不知道在 OP 的案例中发生了什么)。
【解决方案2】:

正如其他人所指出的,通常使用 -join 运算符将输入行与可指定的分隔符连接起来要简单得多。

至于额外空行的问题:Gert Jan Kraaijeveld 似是而非地暗示您的输入文件末尾有一个额外的空行,同时注意到它实际上 不是您发布的代码,应该可以正常工作(尽管效率低下)。

也许额外的行是您如何打印结果值的人工制品。


回答如何忽略输入文件中的空行的相关问题:

假设可以简单地从输入中删除 all 空行,最简单的 PowerShell 惯用解决方案是:

@(Get-Content D:\ServerName.txt) -ne '' -join ','

@(Get-Content D:\ServerName.txt) 将输入行作为字符串数组[1] 返回,
-ne '' 然后从中删除空行,并将其结果-join 与分隔符连接,


[1] Get-Content D:\ServerName.txt 将返回一个 标量(单个字符串),如果输入文件恰好只包含 1 行,因为 PowerShell 通常会报告当管道输出被收集时,单个输出对象本身而不是单元素数组
因此,@(...),数组子表达式运算符 - 而不仅仅是 (...) - 在上述命令中是必需的:它确保来自 Get-Command 的输出被视为 array,因为-ne 运算符对标量 LHS 的作用不同,并返回Boolean 而不是过滤LHS 的元素:比较'foo' -ne ''@('foo') -ne ''
相比之下,如果您将结果(直接)传递给 -join(它只是一个带有标量 LHS 的 no-op),则 @(...)not 必需的:
(Get-Content D:\ServerName.txt) -join ','

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-18
    • 2023-03-23
    • 2015-01-02
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多