有没有办法在powershell中更新命令输出的当前行?
我知道怎么写到同一行:
Write-Host "hello " -NoNewLine
Write-Host "world!" -NoNewLine
但有没有办法完成替换当前的线路?就像是:
Write-Host "hello "
Write-Host "world!" -ReplaceLine
提前致谢!
解:
Write-Host "hello " -NoNewLine
Write-Host "`rworld!"
使用回车返回到行的开头:`r
见:http://ss64.com/ps/syntax-esc.html
回车的定义:http://en.wikipedia.org/wiki/Carriage_return
如果你想清除一条线,那就是一堆空格。否则你可以覆盖东西。
我不能在这里写一个例子,因为它是SO的代码字符,但把它放在“世界”字符串的开头,它应该有用。
希望这可以帮助!
解决方案是在写入主机时使用回车,如其他人所述。确保使用NoNewLine
旗帜与write-host
或它将无法正常工作。
使用以下命令实现回车:`r
这是一个说明这个答案的小例子:
$up = $true
$finish = $false
$timeout = 50
Write-Host "Updating" -NoNewline
do {
for ($i=0;$i -le 100;$i++){
if ($i -eq 100){$up = !$up}
if ($up){
$str = ""
$x=99-$i
for($z=0;$z -le $i;$z++){$str+="."}
for($y=0;$y -le $x;$y++){$str+=" "}
Write-host "`rUpdating$str" -NoNewline
Start-Sleep -Milliseconds $timeout
}else{
$str = ""
$x=99-$i
for($y=0;$y -le $x;$y++){$str+="."}
for($z=0;$z -le $i;$z++){$str+=" "}
Write-host "`rUpdating$str" -NoNewline
Start-Sleep -Milliseconds $timeout
}
}
if ($timeout -le 0){$finish = $true}
$timeout-=10
} until ($finish)
$str = ""
for ($i=0;$i -le 93;$i++){$str+=" "}
Write-Host "`rUpdate Complete!$str"
Read-Host "Press [ENTER] to close this Window"