删除文件时获得释放 space

Get freed space when deleting files

我知道我可以使用像

这样的命令递归删除具有特定扩展名的所有文件
get-childitem c:\ -include *.tmp -recurse | foreach ($_) {remove-item $_.fullname}

但是我必须做什么才能在删除文件后检查释放的 space 大小?

有几种方法可以实现这一点。您可以在代码之前和之后使用 WMI 并检查差异。这可以被认为是一种更简单的方法。

$freeBefore = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object -Expand FreeSpace
...your code...
$freeAfter = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object -Expand FreeSpace

"Reclaimed {0:N4} MB of space" -f (($freeAfter - $freeBefore)/1MB)

注意 在上面的例子中,我将 C: 驱动器硬编码为 DeviceID。这种方法的一个警告是 space 将取决于当时所有的计算机操作,而不仅仅是您自己的操作。与您正在做的事情无关的大文件转储会使数字发生偏差。

另一个想法是在处理数据时计算更改的大小,因为您已经可以访问 $file.length(以字节为单位)

$total = 0 
$size = 0

Get-ChildItem $path -Recurse -Include *.txt | ForEach-Object{
    $size = $_.length
    "Before $size"
    Try{
        Remove-Item $_.FullName
        $total += $size
    } Catch {
        "Could not remove $($_.FullName)"
    }
}

"Reclaimed {0:N4} MB of space" -f ($total/1MB)

后面的代码有它的缺点。一个是这将报告文件内容大小,但磁盘上的大小对于较小的文件来说会稍大一些。如果您有 1000 个只占用 10 个字节的 tmp 文件,则文件数据将比磁盘上的大小小得多,每个文件的大小为 4KB。

在任何一种情况下,您都应该考虑错误,因为整个本地磁盘上的文件尤其可能出现这种情况。 Tmp 文件可能会被无法删除的程序打开以供写入。 -Force 可以提供帮助,但并非总是如此。您需要小心 运行 编写这样的代码。