首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PowerShell,可以用"Write-Host“覆盖一行吗?

使用PowerShell,可以用"Write-Host“覆盖一行吗?
EN

Stack Overflow用户
提问于 2014-01-29 02:49:33
回答 2查看 3.3K关注 0票数 3

我有一个简单的文件处理工具,我想提供一些进度反馈,而不会在控制台上产生“滚动风暴”。我试过这个:

代码语言:javascript
复制
param([string] $input = "", [string] $output = "")

$source = $PSBoundParameters["input"] 
$destination = $PSBoundParameters["output"]

if (!$source) 
    {exit}

if (!$destination) 
    { 
        $destination = [System.IO.Path]::GetDirectoryName($source) `
        + "\fmt_" `
        + [System.IO.Path]::GetFileName($source)

    }

$reader = [System.IO.File]::OpenText($source)
$writer = [System.IO.file]::CreateText($destination)

$lineNo = 0
try {
    for(;;) {
        $line = $reader.ReadLine()
        if ($line -eq $null) { break }
        $lineNo++
        Write-Host "Processing line #:" $lineNo -NoNewline "`r"
        #process the line...
        $writer.Writeline($line)
    }
}
finally {
    $reader.Close()
    $writer.Close()
}

我得到的输出如下所示:

代码语言:javascript
复制
Processing line #:  1 Processing line #:  2 Processing line #:  3 ...

似乎回车符未被识别或已被删除。有没有办法通过Write-Host解决这个问题?

如果没有,PowerShell新手会做什么来覆盖写到控制台的最后一行?

EN

回答 2

Stack Overflow用户

发布于 2014-01-29 03:13:01

试试这个:

代码语言:javascript
复制
gci *.txt |% {write-host "`r$($_.name)" -NoNewline; Start-Sleep -Seconds 1}
票数 1
EN

Stack Overflow用户

发布于 2015-08-06 06:26:43

修改Write-Host行,如下所示:

代码语言:javascript
复制
Write-Host "`rProcessing line #: $lineNo" -NoNewline
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21414250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档