删除项目引发找不到文件

问题描述

我是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