размер файлов на основе определенных расширений - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь найти все файлы на определенном диске, к которым осуществляется доступ до 40 дней, определить их тип и размер файлов в зависимости от расширения. У меня 40000 файлов в 126 папках, и в общей сложности 51 различных расширений (типов файлов), теперь, когда я хочу найти, какой тип файла занимают, кто много места.

С этим я получил количество файлов на основе расширения:

Get-ChildItem -Path X:\ -Recurse |where{-not $_.PSIsContainer} | group Extension -NoElement

С этим я получил ряд уникальных расширений:

Get-ChildItem -Path X:\ -Recurse | Select-Object -Property Extension -Unique

Get-ChildItem -Path X:\ -Recurse |where{-not $_.PSIsContainer} | group Extension -NoElement

Get-ChildItem -Path X:\ -Recurse | Select-Object -Property Extension -Unique

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

Буду надеяться, что все не так плохо.:)

# directory path
$directory = "X:\"

# date -40 days
$date = (Get-Date).AddDays(-40)

# files which are accessed before 40 days
$files = Get-ChildItem $directory -Recurse -File:$true | Where-Object {$_.LastWriteTime -gt $date} 

# file extensions
$fileExtensions = $files | Select-Object -Property Extension -Unique


    foreach ($ext in $fileExtensions){

        [int]$fileSize = $null

        foreach ($file in $files) {

            if ($file.Extension -like $ext.Extension) {

                [int]$fileSize += $file.Length / 1KB
            }
        }

        Write-Host "Extension:" $ext.Extension " - Size: "$fileSize "KB"
    }
0 голосов
/ 11 июля 2019

Может быть, что-то вроде этого, я не уверен, как отформатировать его в таблице:

$files = Get-ChildItem $directory -Recurse -File:$true | Where-Object {$_.LastWriteTime -gt $date} 

foreach($file in $files){
[IO.Path]::GetExtension($file)
$file.length
}
0 голосов
/ 10 июля 2019

Может быть, попробовать это.

# directory path
$directory = "C:\Program Files"

# date -40 days
$date = (Get-Date).AddDays(-40)

# files which are accessed before 40 days
$files = Get-ChildItem $directory -Recurse -File:$true | Where-Object {$_.LastWriteTime -gt $date}

# sort files by extension, size
$files | Sort-Object Extension,Length | Select-Object Name,@{label = 'Length'; e = {"{0:N3} KB" -f ($_.Length / 1KB)}} | ft -AutoSize -Wrap
...