如何使用PowerShell以递归方式删除具有特定名称的文件夹?

Ton*_*one 24 directory powershell recursion windows-7

我可以删除多个文件夹中具有特定扩展名的文件:

Get-childitem * -include *.scc -recurse | remove-item
Run Code Online (Sandbox Code Playgroud)

但是我还需要删除具有特定名称的文件夹 - 特别是当你从subversion repo中下载文件时subversion创建的文件夹(".svn"或"_svn").

Len*_*rri 45

一个应该这样做:

get-childitem -Include .svn -Recurse -force | Remove-Item -Force –Recurse
Run Code Online (Sandbox Code Playgroud)

其他版本:

$fso = New-Object -com "Scripting.FileSystemObject"
$folder = $fso.GetFolder("C:\Test\")

foreach ($subfolder in $folder.SubFolders)
{
    If ($subfolder.Name -like "*.svn")
    {
        remove-item $subfolder.Path -Verbose
    }       
}
Run Code Online (Sandbox Code Playgroud)


lod*_*ykk 13

为了快速删除,使用-Filter

递归删除具有特定名称的文件夹 -Filter-Include.

因此,为了可见性,这是​​ @Keith 答案的更快版本:

完全打印出来:

Get-ChildItem -Filter .svn -Recurse -Force | Remove-Item -Recurse -Force
Run Code Online (Sandbox Code Playgroud)

简洁版本:

ls . -filter .svn -r -fo | ri -r -fo
Run Code Online (Sandbox Code Playgroud)

  • 嗯 - 还有一个版本可以输出已删除的路径吗?只是为了让我知道它有效。 (2认同)

Kei*_*ill 6

我倾向于避免使用-Include参数,Get-ChildItem因为它比它慢-Filter.但是在这种情况下(因为它不能表示为a -Filter),这就是我要使用的:

Get-ChildItem . -Include .svn,_svn -Recurse -Force | Remove-Item -Recurse -Force
Run Code Online (Sandbox Code Playgroud)

或者如果在提示符下输入:

ls . -inc .svn,_svn -r -fo | ri -r -fo
Run Code Online (Sandbox Code Playgroud)

  • @MikeShepard(和Keith)我冒昧地编辑了一些Keith对答案正文的评论,因为它让我感到困惑!我想最好留下两个评论(和这个)给后代...... (3认同)