Powershell-删除x天以前的文件,但排除文件夹

Powershell-删除x天以前的文件,但排除文件夹,powershell,Powershell,我在网上找到了一个脚本,我编辑了一点,但它不起作用 使用Powershell WS 2008 R2标准 脚本是: $del480 = "I:\CISS\Upload" Get-ChildItem $del480 -recurse *.* -force | where {$_.lastwritetime -lt (get-date).adddays(-480)} | Remove-Item -recurse 我需要的是添加4个文件夹到这个脚本,这必须删除-480天排除。 以下

我在网上找到了一个脚本,我编辑了一点,但它不起作用

使用Powershell WS 2008 R2标准

脚本是:

$del480 = "I:\CISS\Upload"
Get-ChildItem $del480 -recurse *.* -force | 
    where {$_.lastwritetime -lt (get-date).adddays(-480)} | 
    Remove-Item -recurse
我需要的是添加4个文件夹到这个脚本,这必须删除-480天排除。 以下是文件夹:

I:\CISS\Upload\_Atest
I:\CISS\Upload\_Reporting
I:\CISS\Upload\_Templates
I:\CISS\Upload\_Upload files

谁能帮帮我吗?请记住,我不是一个脚本作家,我可以读一点。但是如果你添加一个文本,比如add-exclude……,我不知道该放在哪里。

有多种方法可以处理这个问题。您可以在where中执行foreach循环,以对照数组等进行检查。以下是仅使用管道的替代方法

创建一个忽略路径列表,如下所示:

ignorelist.txt

I:\CISS\Upload\_Atest
I:\CISS\Upload\_Reporting
I:\CISS\Upload\_Templates
I:\CISS\Upload\_Upload files
然后尝试以下脚本

#I stored the date to avoid running it multiple times
$limit = (Get-Date).AddDays(-480)
$del480 = "I:\CISS\Upload"
#Specify path for ignore-list
$ignore = Get-Content "C:\Ignorelist.txt"

Get-ChildItem $del480 -Recurse | 
Where-Object {$_.LastWriteTime -lt $limit } |
Select-Object -ExpandProperty FullName |
Select-String -SimpleMatch -Pattern $ignore -NotMatch | 
Select-Object -ExpandProperty Line |
Remove-Item -Recurse

首先使用忽略列表过滤Get ChildItem不是更容易、更简单、更安全吗?我将对此进行测试,将所有子文件夹添加到忽略列表中。现在谢谢你。我不是说你需要添加每个文件夹。这只是一个警告,如果您从
\Upload
搜索,并将
\Upload\Folderone\Ignore
添加到列表中,则
\Upload\Folderone
仍将被删除(包括下面的所有文件夹)。@EBGreen,如何删除
Get childitem
不支持数组作为筛选器,并且
-exclude
仅检查文件名。据我所知,上述解决方案的替代方案是在where语句中运行ignore列表,我希望避免这种情况(因为这在这里的其他100篇文章中已经解释过),我没有使用文件夹名称对其进行测试,但它确实支持帮助中的数组:-Exclude忽略指定的项。此参数的值限定路径参数。输入路径元素或模式,例如“*.txt”。允许使用通配符。