我正在尝试创建一个PowerShell 3脚本,该脚本将扫描带有一堆子文件夹的D:folder
,逐个文件删除最旧的文件,直到可用空间达到5GB,然后停止。空文件夹应该保持不变,因为创建这些文件和文件夹的应用程序似乎需要这些空文件夹。
我创建了一个这样的脚本,但我需要以某种方式循环和修改它,因为它有时也希望删除包含全部内容的子文件夹,但无论最旧的文件是什么文件夹,我都需要逐个文件删除,直到可用空间达到5GB:
[WMI]$part = "Win32_LogicalDisk.DeviceID='D:'"
if (($part.FreeSpace / $part.Size * 100) -lt 50) {
foreach ($root in 'D:') {
Get-ChildItem $root -Recurse |
Sort-Object CreationTime |
Select-Object -First 1 |
Remove-Item
}
}
感谢您的关注!
添加-File
(如果您使用PS 3.0),您将不会以这种方式获得文件夹,只能获得文件。您也可以使用while
循环而不是if
:当可用空间低于50%时,它将继续并删除文件,一次一个。在这种情况下,在循环结束时,您需要刷新可用空间信息。
我不确定WMI调用是否也必须在while
循环内进行,以获得最新信息。
[WMI]$part = "Win32_LogicalDisk.DeviceID='D:'"
$percent = $part.FreeSpace / $part.Size * 100
while ($percent -lt 50) {
Get-ChildItem "D:" -Recurse -File |
Sort-Object CreationTime |
Select-Object -First 1 |
Remove-Item
$percent = $part.FreeSpace / $part.Size * 100
}
使用PS 2.0:
[WMI]$part = "Win32_LogicalDisk.DeviceID='D:'"
$percent = $part.FreeSpace / $part.Size * 100
while ($percent -lt 50) {
Get-ChildItem "D:" -Recurse |
Where-Object { -not $_.PSisContainer } |
Sort-Object CreationTime |
Select-Object -First 1 |
Remove-Item
$percent = $part.FreeSpace / $part.Size * 100
}