Remove-Item 抛出找不到文件

Remove-Item throws File not found

我是 power shell 脚本的新手。我需要一个 Power shell 脚本来检查可用磁盘 space 并从文件夹中删除一些旧的子文件夹,直到空闲 space 达到阈值级别。

在“D:\InstallApp\Backup”这个路径中,我有多个文件夹,每个文件夹都以日期作为文件夹名称。我必须删除一些过时的旧备份文件夹,让免费 space 达到阈值 level.Thanks 提前:)

$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 抛出文件未找到异常

Remove-Item 需要 -Path 的字符串(查看 Remove-Item -?),因此文件项将转换为字符串,这将只是文件名,而不是完整路径。

使用

$toDelete | foreach { Remove-Item $_.FullName }

或更好

$toDelete | Remove-Item