Для каждого объекта получите размер файла - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу, чтобы в качестве заголовка предлагалось получить размер в килобайтах для каждого файла в каталоге и сохранить его в массиве вместе с таким именем файла.

@(
('Sample.txt',10)
)

Я пыталсяиспользуя для каждого объекта и получить свойство элемента, подобное этому

Get-ChildItem $path | ForEach-Object{
$size += Get-ItemProperty.length 
}

, но оно не работает, потому что у меня нет переменной, указывающей на это.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Я думаю, вам лучше использовать массив PSCustomObjects.[ ухмылка ] что-то вроде кода ниже.Полученная коллекция готова для использования в других ситуациях, например при экспорте в файл CSV.

вы можете удалить отступы в свойстве .Size_KB.сейчас это дает <some spaces><number>.если вы удалите ,7, вы можете покончить с пробелами слева.

$SourceDir = $env:TEMP
$Filter = '*.log'

$FileList = Get-ChildItem -LiteralPath $SourceDir -Filter $Filter -File

$Results = foreach ($FL_Item in $FileList)
    {
    [PSCustomObject]@{
        Name = $FL_Item.Name
        Location = $FL_Item.Directory
        Size_KB = '{0,7:N2}' -f ($FL_Item.Length / 1KB)
        }
    }

$Results

вывод ...

Name                                              Location Size_KB
----                                              -------- -------
Genre-List_2018-12-18.log                         C:\Temp     0.17
Grouping-Strings-List_2018-12-19.log              C:\Temp    46.52
Grouping-Words-List_2018-12-19.log                C:\Temp     1.13
Itunes_AlbumAutoRating_Disable.ps1_2018-12-17.log C:\Temp     0.21
Itunes_Default-Rating_Set.ps1_2018-12-21.log      C:\Temp     0.21
Itunes_Genre-Cleanup.ps1_2018-12-18.log           C:\Temp     0.31
Itunes_Grouping-Cleanup.ps1_2018-12-19.log        C:\Temp     0.38
Itunes_R-PC-SC_Save.ps1_2018-12-20.log            C:\Temp     0.20
jusched.log                                       C:\Temp     9.99
vscode-inno-updater-1545349272.log                C:\Temp   337.14
0 голосов
/ 21 декабря 2018

Что вы ищете, так это то, что в PowerShell называются хеш-таблицами.

При использовании foreach-object вы можете ссылаться на отдельный объект в списке, который повторяется, используя $_

Код ниже выполнит то, что вы пытаетесь сделать:

$size = @{}
get-childitem -path "C:\Temp" | foreach-object {
  $name = $_.Name
  $filesize = ((get-item $_.FullName).Length/1KB)
  $size[$name] = $filesize
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...