Powershell - 删除旧文件夹但不删除旧文件

时间:2016-03-11 09:31:05

标签: powershell backup

我有以下代码可以保留我不再想要保留的旧文件夹

     Get-ChildItem -Path $path -Recurse -Force -EA SilentlyContinue| 
      Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } |
       Remove-Item -Force -EA SilentlyContinue
     Get-ChildItem -Path $path -Recurse -Force -EA SilentlyContinue| 
      Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path 
       $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) 
       -eq $null } | Remove-Item -Force -Recurse -EA SilentlyContinue

删除超过特定天数($ limit)的任何内容,包括文件和文件夹。 但是,我所追求的只是删除旧文件夹及其内容。

例如,一天的文件夹可能有一年内的文件,但我想保留该文件夹和旧文件。上面的代码保留文件夹但删除文件。我想要做的就是删除根目录中早于 $ limit 的文件夹(及其内容),否则只留下其他文件夹和内容。

提前致谢。

1 个答案:

答案 0 :(得分:0)

看看这一点:

 Get-ChildItem -Path $path -Recurse -Force -EA SilentlyContinue| 
  Where-Object { !$_.PSIsContainer -and $_.CreationTime -ge $limit } |
   Remove-Item -Force -EA SilentlyContinue

它基本上是说“一切都不是文件夹,而且比指定的旧版本已删除”。所以你的第一步是删除它。

第二部分只是删除空文件夹,您可以保持原样,或者您可以添加到Where语句以包含CreationTime:

 Get-ChildItem -Path $path -Recurse -Force -EA SilentlyContinue| 
  Where-Object { $_.PSIsContainer -and $_.CreationTime -lt $limit -and (Get-ChildItem -Path 
   $_.FullName -Recurse -Force | Where-Object { $_.CreationTime -lt $limit }) 
   -eq $null } | Remove-Item -Force -Recurse -EA SilentlyContinue

第二个Where语句返回一个比$ limit更新的文件和文件夹列表,只删除该文件夹为null。