这是我第一次尝试编写 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
问题:之前打印的行比新打印的行长
问题: 有没有办法“删除/替换”以前打印的行?或者我怎样才能实现这个目标?
因此,为了有效地擦除当前行,您需要将替换内容用空格填充到行尾,这可以通过
.PadRight()
.NET 方法来实现,默认情况下会填充带有 space 字符,实际上清除了该行的其余部分:
Write-Host -NoNewLine "`rSECONDLN".PadRight([Console]::WindowWidth)
上述内容适用于 Windows PowerShell 和 PowerShell 7。
正如 Daniel 指出的,在 PowerShell (Core) 7(在所有支持的平台上),您也可以使用 ANSI / VT 转义序列
`e[2K
首先清除整行:
Write-Host -NoNewLine "`r`e[2KSECONDLN"
或者,您可以清除到行尾(相当于.PadRight()
解决方案;转义序列中的
0
是可选的):
Write-Host -NoNewLine "`rSECONDLN`e[0K"