Tej*_*ejs 8 powershell performance pipeline progress 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
Run Code Online (Sandbox Code Playgroud)
这显示了一个在每个文件被处理时更新的栏,但最后我没有回到平均文件大小数据.显然,我做错了,因为我试图破解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
Run Code Online (Sandbox Code Playgroud)
编辑:我可以做简单的选项:
get-childitem <MyPath> -recurse -filter *.jpeg | measure-object -Property length -Average
Run Code Online (Sandbox Code Playgroud)
然后离开我的工作站一天半或者其他东西,但这似乎有点低效= /
man*_*lds 11
像这样的东西?
get-childitem -recurse -filter *.exe |
%{Write-Host Examining file: $_.fullname; $_} |
measure-object -Property length -Average
Run Code Online (Sandbox Code Playgroud)
更详细的进展:
$images = get-childitem -recurse -filter *.jpeg
$图像| % -begin { $i=0 } `
-process { write-progress -activity "计算平均值..." -status "检查文件:$image.fullpath ($i of $($images.count))" -percentcomplete ($i/$images.count*100 ); $i+=1 } `
-end { write-output "平均文件大小为:$($images | measure-object -Property length -Average)" }