【问题标题】:Removing directories excluding parent directories and subdirectories of a folder that contains specific file删除包含特定文件的文件夹的父目录和子目录以外的目录
【发布时间】:2014-09-03 12:42:13
【问题描述】:

我正在尝试递归删除目录的所有文件和子文件夹,但包含 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”执行“删除目录”操作。

如何防止删除目录树中的父级及其所有直系祖先?

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    $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
    

    【讨论】:

      最近更新 更多