Вопрос о продвижении Powershell Get-ChildItem - PullRequest
8 голосов
/ 03 мая 2011

Итак, у меня есть набор каталогов 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 в значительной степени будет составлять большую часть времени запроса, если я правильно понимаю вещи. Любые указатели, чтобы получить то, что я хочу? АКА, мой результат в идеале будет:

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 ]

11 голосов
/ 03 мая 2011

Как то так?

get-childitem -recurse -filter *.exe | 
      %{Write-Host Examining file: $_.fullname; $_} | 
      measure-object -Property length -Average
3 голосов
/ 03 мая 2011

Чуть более детальный прогресс:

$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)" }
...