Как я могу рекурсивно удалить папку с определенным именем с помощью PowerShell?

Я могу удалить файлы с определенными расширениями в нескольких папках с помощью этого:

Get-childitem * -include *.scc -recurse | remove-item

Но мне также нужно удалять папки с определенным именем - в частности, те, что создает subversion ( ".svn" или "_svn" ) при вытаскивании файлов из репозитория subversion.

Ответы

Ответ 1

Этот один должен сделать это:

get-childitem -Include .svn -Recurse -force | Remove-Item -Force –Recurse

Другая версия:

$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
    }       
}

Ответ 2

Я стараюсь избегать параметра -Include на Get-ChildItem, поскольку он медленнее, чем -Filter. Однако в этом случае (поскольку он не может быть выражен как -Filter), это то, что я использовал бы:

Get-ChildItem . -Include .svn,_svn -Recurse -Force | Remove-Item -Recurse -Force

или введите его в командной строке:

ls . -inc .svn,_svn -r -fo | ri -r -fo

Ответ 3

Рекурсивное удаление папки с определенным именем -Filter значительно быстрее, чем -Include.

Итак, для наглядности вот более быстрая версия ответа @Keith:

Полностью распечатано:

Get-ChildItem -Filter .svn -Recurse -Force | Remove-Item -Recurse -Force

Короткая версия:

ls . -filter .svn -r -fo | ri -r -fo