我想使用powershell从目录树中强制删除任何名为.unwanted
的隐藏目录。
我希望为新手提供足够简单的解决方案,以使其易于理解和学习。我知道命令Get-ChildItem
和Remove-Item
,但我还不了解如何使用新型变量将它们链接/传递。
答案 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)值的文件夹。