基于特定扩展名的文件大小

时间:2019-07-10 07:00:47

标签: powershell fileserver

我正在尝试查找在40天之前可以访问的特定驱动器中的所有文件,并根据扩展名找到它们的文件类型和特定大小的文件。 我现在有126个文件夹中的40000个文件,共有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 :(得分:0)

也许试试看。

# 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

答案 1 :(得分:0)

我希望情况还不错。 :)

# 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"
    }

答案 2 :(得分:0)

也许是这样,我不确定如何在表格中设置其格式:

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

foreach($file in $files){
[IO.Path]::GetExtension($file)
$file.length
}