电源外壳删除项递归子目录 3 级别下



我想不出一种方法来递归删除所有文件夹,除了每个文件夹中名为"broadcast"的子目录

Dir
->subdir1
-->main
-->broadcast
->subdir2
-->main
-->broadcast
->test

我想保留所有的subdir#\broadcast文件夹和测试文件夹。下面这段代码的问题在于,这会在下面的几个递归中删除 subdir1 和 subdir2,这会删除子目录

Get-ChildItem -Path  $copy_file -Recurse |
Select -ExpandProperty FullName |
Where {$_ -notlike '*broadcast*'  -and $_ -notlike '*testing*'} |
sort length -Descending |
Remove-Item -force 

我不能使用 -force/a,因为我在排序时得到的这个列表包括 subdir1 和 subdir2...

It does prompt me "This item has children..."
[Y] Yes [A] Yes to all... [L] No to all

我确实希望它自动选择 L

有什么建议吗?提前谢谢你...我确实浏览了一下,但找不到我正在寻找的确切解决方案。

这将排除"广播"文件夹(您可以替换为您的文件夹),然后您可以将对象传递到删除项中

Get-ChildItem -Path D: -Recurse -Exclude @('broadcast') -Directory | ForEach-    Object($_){
Write-Host $_.FullName
}

这将要做的是导航顶部路径$copyfile并拉取所有子目录。不是递归的,只是直接的子级。对于这些孩子中的每一个,我们将过滤掉所有名称为 broadcast 的文件夹。在剩下的那些中,删除它们

Get-ChildItem -Path  $copy_file -Directory | ForEach-Object{
    Get-ChildItem -Directory -Path $_.FullName | Where-Object{$_.Name -ne "broadcast"} | Remove-Item -Force -WhatIf
}

您可能需要向Remove-Item添加-Recurse,我-WhatIf留在那里,以便您可以进行测试。

最新更新