问题描述
我是Power Shell脚本的新手。我需要一个Power Shell脚本来检查可用磁盘空间,并从文件夹中删除一些旧的子文件夹,直到可用空间达到阈值水平。
在“ D:\ InstallApp \ Backup”中,此路径中有多个文件夹,每个文件夹的日期均为文件夹名称。我必须删除一些旧的日期备份文件夹,以使可用空间达到阈值水平。 前进:)
$driveLetter = "D"
$directory = "D:\InstallApp\Backup"
$desiredGiB = 266
$desiredBytes = $desiredGiB * 1073741824
Get-PSDrive $driveLetter | ForEach-Object { $free = $_.Free }
$list = $(Get-ChildItem $directory -File | sort-object -Property LastWriteTime)
#Write-Output $list
if ($free -lt $desiredBytes) {
$toDelete = @()
$needed = $desiredBytes - $free
$spacetoFree = 0
foreach ($item in $list) {
$toDelete += $item
#write-Output $toDelete
$spacetoFree += $item.Length
#write-Output $spacetoFree
if ($spacetoFree -ge $needed) {
break
}
}
$toDelete | ForEach-Object {
## Remove -WhatIf when you are comfortable that this is working as intended
Remove-Item $toDelete
}
}
解决方法
Remove-Item
需要-Path
的字符串(签出Remove-Item -?
),因此文件项将转换为字符串,该字符串将仅是文件名,而不是完整路径。>
使用
$toDelete | foreach { Remove-Item $_.FullName }
或更好
$toDelete | Remove-Item