我正在尝试递归删除目录的所有文件和子文件夹,但包含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”上执行“删除目录”操作 ...
如何防止在目录树中删除父及其所有直接祖先?
答案 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