我想不出一种方法来递归删除所有文件夹,除了每个文件夹中名为"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
留在那里,以便您可以进行测试。