获取文件在磁盘上的大小



我有一个简单的PowerShell脚本,它列出了目录中的所有文件,并将其打印到.txt文件中,如下所示

$currentDir = 'C:files'
Get-ChildItem $currentDir -Recurse -Force | ForEach-Object {
$_.BaseName + "|" + $_.Extension + "|" + '{0:N2}' -f ($_.length/1MB) >> files_log.txt
}

但是,它只获取文件的大小。我想知道这个文件在磁盘上的大小。输出应该类似于:

BaseName | Extension | Size | Size_on_Disk
file | .pdf | 0.06 | 1.00
file2 | .mp3 | 0.30 | 1.00

我已经搜索过了,但我只得到关于如何获得文件夹中文件的磁盘大小总和的结果。我还没有找到从ForEach-Object访问上述房产的正确方法。

如何从PowerShell获取文件属性中的Size On Disk参数

你可以做一些数学技巧。根据DelphicOracle在这里的评论,您可以根据驱动器的分配单元大小来计算它。

function Get-SizeOnDisk {
[CmdletBinding()]
[OutputType([int64])]
param (
[Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
[string]
$Path
)
process {
$absolutePath = ($Path | Resolve-Path).Path
$item = Get-Item $absolutePath
$volume = Get-Volume $item.PSDrive.Name
$d = [int][System.Math]::Ceiling($item.Length / $volume.AllocationUnitSize)
return $d * $volume.AllocationUnitSize
}
}
'myItem.ext' | Get-SizeOnDisk

基本上,您可以检查驱动器的AllocationUnitSize与文件的实际长度匹配多少次,如果分区有剩余部分,您就会收到它。

最新更新