Как я могу рекурсивно удалить папку с определенным именем с помощью 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