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