如何从树中删除所有隐藏的不需要的目录?

时间:2019-05-08 09:14:07

标签: powershell powershell-v4.0

我想使用从目录树中强制删除任何名为.unwanted的隐藏目录。

我希望为新手提供足够简单的解决方案,以使其易于理解和学习。我知道命令Get-ChildItemRemove-Item,但我还不了解如何使用新型变量将它们链接/传递。

3 个答案:

答案 0 :(得分:3)

Get-ChildItem -Force -Recurse -Directory -Filter .unwanted |
  Remove-Item -Force -Recurse -WhatIf

-WhatIf 预览;删除它以执行实际删除。

    需要
  • -Force才能定位隐藏的项目(如果在Windows上为Remove-Item,则覆盖r(只读)属性,如果允许)。

  • -Recurse在整个子树(Get-ChildItem)中查找目录,并在没有确认提示的情况下删除非空目录(Remove-Item)。

顺便说一句:使用-Filter是查找感兴趣目录的最有效方法,因为它在源位置进行过滤,而{隐含}使用-Path将使PowerShell枚举所有目录首先,然后进行过滤。

答案 1 :(得分:1)

提供的Bash代码可以转换为以下代码:

Get-Childitem *unwanted* -Recurse | Remove-Item -Confirm:$false -ErrorAction SilentlyContinue

取决于权限,您可能必须在第二个命令上使用-Force参数。我还建议在任何生产环境中使用它们之前,对这些命令进行一些研究和测试。事情可能变得很危险:)

我还将在PowerShell Pipelines here

上留下一篇不错的文章

答案 2 :(得分:0)

您可以根据自己的需要尝试以下方法-

Get-ChildItem -path \\PathToYourFolder\ -recurse | where {$_.PSIsContainer -eq $true -and $_.Name -eq ".unwanted"} | Remove-Item

简单来说,PowerShell管道在其左侧提取cmdlets的输出,并将其作为输入传递到其右侧的cmdlets

命令where {$_.PSIsContainer -eq $true使用所有文件系统对象的PsIsContainer属性来仅选择在其PsIsContainer属性中具有True($ true)值的文件夹。