【问题标题】:Powershell: Some simple numberingPowershell:一些简单的编号
【发布时间】:2017-11-23 19:22:06
【问题描述】:

所以我想在运行 powershell 脚本时在主机中显示一个简单的“这是我们要做的”编号。我创建了以下内容来解决这个问题:

$musicList = Get-ChildItem "C:\Users\rlyons\Music" -Recurse -File | Select-Object FullName
$outfile = @{} 
$num = 1
foreach ($sound in $musicList) {
    $file = $sound.FullName.ToString()
    $md5 = Get-FileHash $file -Algorithm MD5
    $outFile.$file += $md5.Hash
    Write-Output "Processed file $num"
    $num ++
}

这很好用!除了它给了我:

Processed file 1
Processed file 2
Processed file 3
Processed file 4
Processed file 5

等等等等。我想要的是每次处理文件时屏幕都清空,所以我只想看到在写入主机的行尾所处理文件的数量变化。

我尝试在$num ++ 之后以及在foreach 循环的开始处添加旧的Clear-Host,但我得到的只是一条闪烁的线,有时是部分可辨认的。是的,这取决于文件的处理速度,但我想知道这是否有技巧?让Processed file 位在屏幕上持续显示,但数字向上递增?

如果它不清除屏幕会更好,这样您就可以看到所有以前写入的输出但刷新这一行?这可能吗?

注意:我正在 VS Code 中尝试这个,Powershell 5.1

【问题讨论】:

标签: powershell


【解决方案1】:

根据 cmets,Write-Progress 更适合这种情况,因为它可以为您提供所需的输出,但不会影响脚本的实际输出流(例如,返回给您可能编写的任何潜在后续命令的内容) .

您可能希望使用Write-Progress 来显示完成百分比:

$musicList = Get-ChildItem "C:\Users\rlyons\Music" -Recurse -File | Select-Object FullName
$outfile = @{} 
$num = 1
foreach ($sound in $musicList) {
    $file = $sound.FullName.ToString()
    $md5 = Get-FileHash $file -Algorithm MD5
    $outFile.$file += $md5.Hash
    Write-Progress -Activity "Processed file $num of $($musiclist.count)" -PercentComplete ($num / $musiclist.count * 100)
    $num ++
}

【讨论】:

  • 所以这完美地工作,除了在 Visual Studio Code 中,这是一种耻辱!我会将其发布在他们的 Git 页面上。在 ISE 中按预期工作。
  • 这可能与 clear-host 功能实际上没有清除控制台的问题有关。脚本和他们的 git 页面的后续工作都做得很好
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多