Войти

Показать полную графическую версию : [решено] посчитать суммарный объем файлов в папке по типам


Bint
20-06-2010, 06:03
Собственно требуется посчитать сколько в какойто папке весят картинки, сколько музыка и т.п. как можно реализовать?
Поле Length ($_.Length) просуммировать в какую-либо переменнуя не получается из-за типа. А Measure-Object изменяет поле Sum входной переменной как я понимаю и соответственно за один обход можно узнать суммарный объем только одной группы файлов.

amel27
20-06-2010, 08:54
где-то так:
$sRoot="C:\"

$types=@{
BMP="Graph";JPG="Graph";GIF="Graph";DIB="Graph"
ICO="Graph";ICB="Graph";PCX="Graph";PCD="Graph"
PSP="Graph";PBM="Graph";PGM="Graph";PSD="Graph"
PPM="Graph";PSG="Graph";PNG="Graph";EMF="Graph"
WMF="Graph";TIF="Graph";RLE="Graph";SGI="Graph"
TGA="Graph"

PCM="Audio";WAV="Audio";MP3="Audio";Flac="Audio"
AAC="Audio";WMA="Audio";OGG="Audio";Midi="Audio"
VOX="Audio";MPC="Audio";APE="Audio";Aiff="Audio"
AU ="Audio";WV ="Audio"
}

$zGraph = (dir "$sRoot" -recurse | Where-Object {
$types[$_.Extension.Replace(".","")] -ieq "Graph"
} | Measure-Object Length -Sum).Sum/1Mb

"Graph Size: " + [math]::round($zGraph,2) + " Mb"

Bint
20-06-2010, 09:14
нее, в том то и дело, что здесь вычисляется суммарный объем всех подходящих файлов в одну переменную, а мне надо именно по расширениям т.е. отдельно сколько в папке метров картинок, сколько музыки и сколько видео например.
Вот собстно и вопрос можно ли сделать это не обходя всю папку отдельно для каждого типа...

amel27
20-06-2010, 10:36
добавить еще один массив:
$sRoot="C:\"

$types=@{
BMP="Graph";JPG="Graph";GIF="Graph";DIB="Graph"
ICO="Graph";ICB="Graph";PCX="Graph";PCD="Graph"
PSP="Graph";PBM="Graph";PGM="Graph";PSD="Graph"
PPM="Graph";PSG="Graph";PNG="Graph";EMF="Graph"
WMF="Graph";TIF="Graph";RLE="Graph";SGI="Graph"
TGA="Graph"

PCM="Audio";WAV="Audio";MP3="Audio";Flac="Audio"
AAC="Audio";WMA="Audio";OGG="Audio";Midi="Audio"
VOX="Audio";MPC="Audio";APE="Audio";Aiff="Audio"
AU ="Audio";WV ="Audio"
}

$aSize=@{Graph=0;Audio=0}

dir "$sRoot" -recurse | Where-Object {
$ext=$_.Extension.Replace(".","");$types.ContainsKey($ext)
}| ForEach {$aSize[$types.Get_Item($ext)]+=$_.Length}

$aSize|Format-Table Name, @{
Label="Size";Expression={[string][math]::round($_.Value/1Mb)+" Mb"};Align="Right"
}




© OSzone.net 2001-2012