我可以使用以下方法在多个文件夹中删除具有特定扩展名的文件:
Get-childitem * -include *.scc -recurse | remove-item
但我还需要删除特定名称的文件夹-特别是当您从subversion repo中拉取文件时创建的那些(".svn"或"_svn")。
我可以使用以下方法在多个文件夹中删除具有特定扩展名的文件:
Get-childitem * -include *.scc -recurse | remove-item
但我还需要删除特定名称的文件夹-特别是当您从subversion repo中拉取文件时创建的那些(".svn"或"_svn")。
这个方法可以解决问题:
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
}
}
我倾向于避免在Get-ChildItem
上使用-Include
参数,因为它比-Filter
慢。 但是在这种情况下(因为无法表示为-Filter
),这就是我要使用的:
Get-ChildItem . -Include .svn,_svn -Recurse -Force | Remove-Item -Recurse -Force
或者如果在命令提示符中输入:
ls . -inc .svn,_svn -r -fo | ri -r -fo
?
没有按照我的预期工作。它应该匹配 _
和 .
,但它没有匹配 .
。真是让人费解。 - Keith HillGet-ChildItem
,所以我在 ri
或 Remove-Item
命令中添加了 -ErrorAction SilentlyContinue
来将其静音。 - angularsen递归删除具有特定名称的文件夹时,-Filter
比 -Include
要快得多。
因此,为了方便查看,这是@Keith答案的更快版本:
完整输入:
Get-ChildItem -Filter .svn -Recurse -Force | Remove-Item -Recurse -Force
简明版:
ls . -filter .svn -r -fo | ri -r -fo
ls . -filter .git -r -fo | ri -r -fo
。 - Anatoly Mironov
.svn
文件夹的人来说:也许svn export
对你有用。它会执行一个检出操作,但不会添加.svn
文件夹。 - Frank Kusters