Powershell 删除早于x天的子文件夹中的文件

Powershell 删除早于x天的子文件夹中的文件,powershell,Powershell,我正在尝试删除给定文件夹子文件夹中的所有文件,而不删除子文件夹本身。我试过各种各样的例子,但它们没有达到我的预期 我试图协商的文件树的基本结构是: C:\Backups\Subfolder1 C:\Backups\Subfolder2 C:\Backups\Subfolder3 我发现,尽管使用了-Recurse标志,但子目录中的文件被忽略,尽管C:\Backups目录中的任何文件都包含在内。如果我删除!$。PSIsContainer子句子文件夹中的文件包括在内,但所有目录也包括在内 有人能告诉

我正在尝试删除给定文件夹子文件夹中的所有文件,而不删除子文件夹本身。我试过各种各样的例子,但它们没有达到我的预期

我试图协商的文件树的基本结构是:

C:\Backups\Subfolder1 C:\Backups\Subfolder2 C:\Backups\Subfolder3 我发现,尽管使用了
-Recurse
标志,但子目录中的文件被忽略,尽管C:\Backups目录中的任何文件都包含在内。如果我删除
!$。PSIsContainer
子句子文件夹中的文件包括在内,但所有目录也包括在内

有人能告诉我如何在忽略子文件夹的同时将文件包含在子文件夹中吗

$limit = (Get-Date).AddDays(-14)
$files = Get-ChildItem -Path C:\Backups -Directory:$false -Recurse
$files | ForEach-Object -Process {
  if($_.CreationTime -lt $limit)
  {
    Remove-Item $_.FullName -Force
  }  
}

-Directory:$False
参数意味着您不必担心删除任何目录,因为它们不会包含在数组中。

下面的代码适合我。您是否使用较旧版本的powershell

$limit = (Get-Date).AddDays(-14)
$path  = "C:\Users\nathan.cooper\Documents"
Get-ChildItem -Path $path -Recurse -Force | 
  where { (! $_.PSIsContainer) -and ($_.LastWriteTime -lt $limit) } |
  Remove-Item -whatif

如果您使用的是powershell 3.0,只需使用
-File
开关即可:

$limit = (Get-Date).AddDays(-14)
$path = "C:\Backups"
Get-ChildItem -Path $path -File -Recurse | where { $_.LastWriteTime -lt $limit } | Remove-Item

我没有看到你的代码中有错误,这应该可以。。。您是否知道您正在使用
-WhatIf
标志,并且没有文件被实际删除?是的,我知道。在这个阶段,我只是验证哪些文件正在被删除。在将lt更改为gt后,因为我无法使用两周前创建的文件重新创建,它同样适用于我
如果:在目标“C:\Backups\Subfolder1\Test.txt”上执行操作“Remove file”。
@BenH
$f=New Item'C:\path\to\file'-类型文件$f、 CreationTime=$f.CreationTime.AddDays(-21)
@AnsgarWiechers谢谢,我想我应该用更精确的措辞,因为我懒得修改CreationTime而不是更改一个字母。希望脚本按预期工作的意图仍然很清楚,-Directory:$False参数意味着您不必担心删除任何目录,因为它们不会包含在数组中。您应该将其作为编辑添加到您的答案中,因为注释并不总是被读取,也不保证被保留。另外,你的答案可能会更有用,再加上一点解释。我也不喜欢这种方法,目录仍然包括在内。然而,进一步的研究让我想到了这一点:“代码”$files2=getchilditem-Path$Path-Recurse-Attributes!这确实实现了我忽略目录的目标。
$limit = (Get-Date).AddDays(-14)
$path = "C:\Backups"
Get-ChildItem -Path $path -File -Recurse | where { $_.LastWriteTime -lt $limit } | Remove-Item