我知道我可以使用像
这样的命令以递归方式删除具有特定扩展名的所有文件get-childitem c:\ -include *.tmp -recurse | foreach ($_) {remove-item $_.fullname}
但是为了在删除文件后检查释放的空间大小,我必须做些什么?
答案 0 :(得分:1)
有几种方法可以实现这一目标。您可以在代码之前和之后使用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
。这种方法的一个警告是,空间将依赖于当时的所有计算机操作而不仅仅是您自己的操作。与您正在执行的操作无关的大型文件转储会使数字出现偏差。
另一个想法是在您处理数据时计算更改的大小,因为您已经可以访问$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个tmp文件,只占用10个字节,那么文件数据将远小于磁盘上的大小,每个文件大小为4KB。
在任何一种情况下,您都应该考虑到错误,因为对于整个本地磁盘上的文件尤其如此。可以通过无法删除的程序打开Tmp文件进行写入。 -Force
可以帮助但不总是如此。您需要小心运行这样的代码。