PowerShell:-NoNewLine 将新行与最后一行重叠

问题描述 投票:0回答:1

这是我第一次尝试编写 PowerShell 脚本

我做了这个例子来解释我的问题:

Write-Host -NoNewLine "`rthis-is-my-first-line"
Start-Sleep -Milliseconds 1000

Write-Host -NoNewLine "`rSECONDLN"
Start-Sleep -Milliseconds 500

Write-Host

输出:

SECONDLNmy-first-line
但我希望它只是
SECONDLN

问题:之前打印的行比新打印的行长

问题: 有没有办法“删除/替换”以前打印的行?或者我怎样才能实现这个目标?

powershell write-host
1个回答
1
投票
  • `r
    转义序列扩展为CR(回车)字符,其作用是将终端(控制台)光标返回到当前行的开头

  • 值得注意的是,它不会删除该行的当前内容。

因此,为了有效地擦除当前行,您需要将替换内容用空格填充到行尾,这可以通过

.PadRight()
.NET 方法来实现,默认情况下会填充带有 space 字符,实际上清除了该行的其余部分:

Write-Host -NoNewLine "`rSECONDLN".PadRight([Console]::WindowWidth)

上述内容适用于 Windows PowerShellPowerShell 7

正如 Daniel 指出的,PowerShell (Core) 7(在所有支持的平台上),您也可以使用 ANSI / VT 转义序列

`e[2K
首先清除整行

Write-Host -NoNewLine "`r`e[2KSECONDLN"
或者,您可以

清除到行尾(相当于.PadRight()

解决方案;转义序列中的
0
是可选的):

Write-Host -NoNewLine "`rSECONDLN`e[0K"
    
© www.soinside.com 2019 - 2024. All rights reserved.