删除除包含特定文件的文件夹的父目录和子目录之外的目录

时间:2014-07-13 11:42:49

标签: powershell recursion directory parent-child delete-file

我正在尝试递归删除目录的所有文件和子文件夹,但包含DoNotDelete.txt文件及其子文件的文件夹和子文件夹除外(即使它们没有该文件)。

我在另一个帖子中找到了一些建议,我提出了这个解决方案:

在这个例子中,我想保留文件夹E:\ testFolder \ testF1 \ blablabla及其子文件。

(Get-ChildItem E:\testFolder -recurse | select -ExpandProperty fullname) -notlike '*blablabla*' | sort length -descending | remove-item -Recurse -WhatIf

该脚本仅按部分工作 - 它跳过删除文件夹'blablabla'及其子文件,但仍删除其父文件夹(文件夹testF1) - 这使得整个过程毫无意义:

  

...
  如果:在目标“E:\ testFolder \ testF1”上执行“删除目录”操作   ...

如何防止在目录树中删除父及其所有直接祖先?

1 个答案:

答案 0 :(得分:0)

试试这个:

$savedirs = @()

$DoNotDeleteFiles = 
get-childitem E:\testfolders -Recurse -Include donotdelete.txt |
select -ExpandProperty fullname 

foreach ($DoNotDeleteFile in $DoNotDeleteFiles)
 {
   While ($true)
    { 
     Try{
      $savedirs += ($DoNotDeleteFile = $DoNotDeleteFile | Split-Path -Parent -ErrorAction stop )
     }
    catch { Break }
   }
  }


(Get-ChildItem E:\testFolder -recurse | select -ExpandProperty fullname) -notlike '*blablabla*' |
 where { $savedirs -notcontains $_ } |
 sort length -descending | remove-item  -WhatIf