Powershell Get-ChildItem进度问题

时间:2011-05-02 20:57:36

标签: performance powershell progress pipeline get-childitem

所以,我在一个文件夹中有一组目录00-99。每个目录都有100个子目录,00-99。每个子目录都有数千个图像。

我正在尝试做的是在计算平均文件大小时基本上获得进度报告,但我无法让它工作。这是我当前的查询:

get-childitem <MyPath> -recurse -filter *.jpeg | Where-Object { Write-Progress "Examining File $($_.Fullname)" true } | measure-object -Property length -Average

这显示了一个条形图,在每个文件被处理时更新,但最后我没有返回平均文件大小数据。显然,我做错了,因为我试图破解Where-Object打印进度声明可能是一个坏主意(tm)。

由于存在数百万个图像,因此该查询显然需要非常长的时间才能工作。如果我理解正确的话,get-childitem几乎是查询时间的主要部分。什么指针得到我想要的? AKA,我的结果理想是:

Starting...
Examining File: \00\00\Sample.jpeg
Examining File: \00\00\Sample2.jpeg
Examining File: \00\00\Sample3.jpeg
Examining File: \00\00\Sample4.jpeg
...
Examining File: \99\99\Sample9999.jpg
Average File Size: 12345678.244567

编辑:我可以做一个简单的选项:

get-childitem <MyPath> -recurse -filter *.jpeg | measure-object -Property length -Average

然后离开我的工作站一天半,或者其他东西,但这似乎有点低效= /

2 个答案:

答案 0 :(得分:11)

这样的东西?

get-childitem -recurse -filter *.exe | 
      %{Write-Host Examining file: $_.fullname; $_} | 
      measure-object -Property length -Average

答案 1 :(得分:3)

更详细的进展:

$images = get-childitem  -recurse -filter *.jpeg

$images | % -begin { $i=0 } `
-process {  write-progress -activity "Computing average..." -status "Examining File: $image.fullpath ($i of $($images.count))" -percentcomplete ($i/$images.count*100); $i+=1 } `
-end { write-output "Average file size is: $($images | measure-object -Property length -Average)" }