我尝试执行以下命令来清除临时目录中的文件。如果特定日期有多个文件,我应该只保留最新文件。
$groups = get-ChildItem -Path "D:\Temp\Archive" -Filter "*_bak.zip" | ?{-not $_.PsIsContainer} | Group {$_.LastWriteTime.ToString("yyyy-MM-dd")}
if($groups -ne $NULL){
ForEach ($files in $groups) {
"Count: $($files.Count)"
if ($files.Count -gt 1) {
$files | Sort LastWriteTime | Select-Object -First ($files.Count - 1) | Remove-Item -Force -WhatIf
}
}
}
但是,我收到以下错误。我以管理员身份执行这些命令。并且,执行策略设置为Unrestricted。
删除项目:无法找到路径' C:\ Windows \ system32 \ Microsoft.PowerShell.Commands.GroupInfo'因为它不存在 在D:\ User1 \ Tasks \ Delete_backup_files.ps1:86 char:87 + $文件|排序LastWriteTime | Select-Object -First($ files.Count - 1)| Remove-Item<<<< -Force -WhatIf + CategoryInfo:ObjectNotFound:(C:\ Windows \ syst ... mands.GroupInfo:String)[Remove-Item],ItemNotFoundException + FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand
如果我只使用UNC路径,Remove-Item
命令就可以正常工作。
$files.FullName
没有价值。我怀疑这可能是个问题。但是,我不确定如何解决它。我需要分组逻辑保持原样。
我希望有人可以帮助我。
谢谢!
答案 0 :(得分:2)
你其实很亲密。您必须将组中的文件传递给sort
命令,而不是组本身:
$files.Group | Sort LastWriteTime | Select-Object -First ($files.Count - 1) | Remove-Item -Force -WhatIf
你得到的错误:
Remove-Item:找不到路径'C:\ WINDOWS \ system32 \ Microsoft.PowerShell.Commands.GroupInfo',因为它不存在。
发生因为Remove-Item
需要字符串作为输入。但是您传递的是GroupInfo
对象,因此PS会调用ToString()
方法。 Remove-Item
将结果字符串解释为位于当前位置C:\WINDOWS\system32\
的文件名。