使用PowerShell脚本从所有30天以上的子文件夹中删除文件

时间:2019-09-01 12:35:42

标签: powershell

我想从30天以下的文件夹结构中删除所有类型的文件。所以我在下面的PowerShell脚本中使用过。但这并不删除任何文件。

PowerShell脚本:

Get-ChildItem –Path  "C:\Users\VJ\Documents\MainDir" –Recurse | Where-Object { $_.CreationTime –lt (Get-Date).AddDays(-30) } | Remove-Item

文件夹结构:

  MainDir
     |
  SubDir1 -> Folder1 -> Folder2 -> Zip/CSV files 
  SubDir2 -> Folder1->.txt files
               |
              Folder2 -> .txt files

最终结果应该是从所有文件夹(MainDir的子文件夹)删除的所有类型的文件。

2 个答案:

答案 0 :(得分:1)

认为您正在混淆属性CreationTimeLastWriteTime

如果您只是将文件(旧)复制到结构中的目录之一,则CreationTime是文件复制到那里的日期和时间,可以是今天。但是,LastWriteTime属性显示了文件的最后写入日期和时间。

尝试:

$refDate = (Get-Date).AddDays(-30)
Get-ChildItem -Path "C:\Users\VJ\Documents\MainDir" -Recurse -File | 
    Where-Object { $_.LastWriteTime -lt $refDate } | 
    Remove-Item -Force

如果您使用的PowerShell版本低于3.0,请使用:

Get-ChildItem -Path "C:\Users\VJ\Documents\MainDir" -Recurse | 
    Where-Object { !$_.PSIsContainer -and  $_.LastWriteTime -lt $refDate } | 
    Remove-Item -Force

此外,请检查并重新输入破折号,因为它们可能看起来像普通的连字符,实际上它们是EN Dashes(十六进制值2013;十进制8211)

希望有帮助

答案 1 :(得分:0)

尝试一下:

Get-ChildItem -Path "C:\Users\VJ\Documents\MainDir" -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime –lt (Get-Date).AddDays(-30) } | Remove-Item -Force