16

is there a way to update the current line of the command output in powershell?

i know how to write to the same line:

Write-Host "hello " -NoNewLine

Write-Host "world!" -NoNewLine

but is there a way to complete replace the current line? something like:

Write-Host "hello "
Write-Host "world!" -ReplaceLine

thanks in advance!


SOLUTION:

Write-Host "hello " -NoNewLine
Write-Host "`rworld!"

2 Answers 2

18

Use carriage return to return to the start of the line: `r

See this: http://ss64.com/ps/syntax-esc.html

And definition of carriage return: http://en.wikipedia.org/wiki/Carriage_return

If you want to clear a line, that and a load of spaces. Otherwise you can overwrite stuff.

I can't really write up an example here as it's SO's code character, but put it at the start of the "world" string and it should work.

Hope this helps!

Sign up to request clarification or add additional context in comments.

2 Comments

thanks Mattsjo that worked! i've updated my question with your answer!
This does not appear to work anymore. Am I missing something? Ahh, appears to work in the console but not the ISE.
3

The solution is to use carriage return while writing to the host, as noted by others. Make sure to use the NoNewLine flag whith write-host or it will not work.

Carriage Return is acheived by using: `r

Here's a small example illustrating this answer:

$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"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.