【发布时间】:2017-11-14 23:42:52
【问题描述】:
我目前正在使用 Powershell 进行编码,我现在正在寻找一种在系统搜索文档时显示进度条的方法。我正在使用Get-ChildItem 而不是循环,因为它比循环快得多。我已经想出了如何使用Get-ChildItem cmdlet,但我需要帮助弄清楚如何在其中实现进度条。这是我正在使用的代码示例,因此更容易理解:
Set-Variable $Loading 0
Write-Progress -Activity "Collecting Files For Removal..." -CurrentOperation "Collecting User Files..." -PercentComplete $Loading
Get-ChildItem C:\Users\firea\ -Filter *.D11 -ErrorAction SilentlyContinue -Force
【问题讨论】:
-
Write-Progress并不是真正设计用于测量像Get-ChildItem这样的命令的运行时间。您更有可能将其用作完成的比较,例如,如果您有一组文件,并且您正在移动它们,您可以在ForEach循环中使用Write-Progress在每次复制后更新或那种性质的东西。 -
@TheIncorrigible1 好吧,我最近一直在尝试减少循环,因为它们比较复杂(我昨天刚开始使用 Powershell),而且我试图保持简单。不过,您确实有一点……一旦我得到更高级的东西,我可能会在不同的项目中尝试这种方法。您还有其他可行的想法吗?
-
如何显示搜索的进度条?系统在完成之前不知道它的上限。
Get-ChildItem是一个单独的 cmdlet,您不能在同一线程中运行任何其他内容,直到它完成为止,显示进度条是没有意义的。如果你想要一个进度条,系统需要事先获取数据,这意味着你必须先进行扫描。而且您将不得不使用您极力避免的“可怕”循环。 -
根据 Rohin 的建议,您无法显示进度条,因为系统在完成之前不知道它必须查看的文件总数。除此之外,PowerShell 一次只做一件事,没有一些相当先进的技术,因此搜索硬盘驱动器并同时显示/更新进度条并不是一个简单的请求。如果您真的想了解如何操作,请查看this link。如果您是新手,请准备好让您的大脑融化一点。
-
只是技术性问题,但我想帮助您了解您的术语以避免混淆。
Get-ChildItem是 cmdlet,而不是脚本。当您编写一系列命令来完成一个或多个任务时,您会得到一个脚本。当提到循环时,它只是一个循环,而不是循环程序。程序意味着 PowerShell 外部的东西,例如 Word 或 Internet Explorer。
标签: windows file powershell get-childitem