Powershell脚本用于删除超过x天的文件,但不删除文件夹

时间:2014-10-28 14:04:14

标签: powershell

我有一个我认为正在运行的脚本,但我收到的报告是删除文件夹而不是文件。有人可以帮我调整我的脚本来解释这个吗?我是否需要添加-file过滤器?

$Path = "D:\AppData\Downloads"

$Limit = (Get-Date).AddDays(-6)

Get-ChildItem -path $Path -Recurse -force | Where-Object {!$_.PSIsContainer -and $_.CreationTime -lt $Limit } | Remove-Item -recurse -Force

1 个答案:

答案 0 :(得分:2)

You Where-Object子句很可能不像您期望的那样工作。

{!$_.PSIsContainer -and $_.CreationTime -lt $Limit } 

应该是

{!$_.PSIsContainer -and ($_.CreationTime -lt $Limit)} 

括号确保第二次逻辑比较独立评估。有关更多信息,请参阅about_logical_operators

  

Windows PowerShell逻辑运算符仅评估语句       需要确定声明的真值。如果是左操作数       在包含和运算符的语句中,右操作数为FALSE       没有评估。如果左边的操作数包含在一个语句中       或者语句为TRUE,不评估右操作数。结果是,       您可以按照使用的方式使用这些语句       If语句。

此外,由于删除文件而不删除文件夹-Recurse Remove-Item似乎没必要。 来自Alroc的评论:假设您拥有PowerShell的第3版或更高版本,您可以使用-File的{​​{1}}参数代替Get-ChildItem !$_.PSIsContainer子句来简化此操作(这是第2版中常见的内容。)就像你在评论中所做的那样:

Where-Object