if (Test-Path $folder) { Remove-Item $folder -Recurse; }
我发现自己重复了几次cmdlet组合,并且希望我有这样的东西:
# Pseudo code:
Remove-Item $folder -Recurse -IgnoreNonExistentPaths
有没有办法做类似的事情?可能是
Remove-Item
文档中缺少的其他命令或选项?还是将这些代码干燥掉的唯一方法是编写自己的结合了Test-Path
和Remove-Item
的cmdlet?#1 楼
我假设您只是想避免出现该错误消息而已。如果忽略该错误怎么办:
Remove-Item $folder -Recurse -ErrorAction Ignore
如果这不是您想要的,我建议您编写自己的函数:
function Remove-ItemSafely {
[CmdletBinding(SupportsShouldProcess=$true)]
param(
[Parameter(
Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true
)]
[String[]]
$Path ,
[Switch]
$Recurse
)
Process {
foreach($p in $Path) {
if(Test-Path $p) {
Remove-Item $p -Recurse:$Recurse -WhatIf:$WhatIfPreference
}
}
}
}
评论
\ $ \ begingroup \ $
-ErrorAction忽略还将忽略安全错误。
\ $ \ endgroup \ $
– jpmc26
18-09-7在19:55
#2 楼
最好使用管道语法。如果没有文件,那么什么都不会发生:Get-ChildItem $folder -Recurse | Remove-Item
评论
\ $ \ begingroup \ $
如果您希望-Recurse正常工作,则它应该在Remove-Item上,否则,除非其中没有文件,否则目录不会被删除。即使那样,它也不会删除$ folder,只会删除它的内容,所以它很好,但是有细微的差别。
\ $ \ endgroup \ $
–briantist
18年2月8日在14:23
\ $ \ begingroup \ $
不会删除空的$ folder
\ $ \ endgroup \ $
–arberg
18年6月15日在12:39
\ $ \ begingroup \ $
按完整路径对项目进行排序,然后反转列表,可以确保孩子在父母之前被删除,从而避免令人讨厌的“您确定吗?”提示。
\ $ \ endgroup \ $
– jpmc26
18年9月7日在19:57
#3 楼
如果无法删除文件,这也会删除一个空文件夹,并且仍然传播错误。Get-childItem .idea\caches -ErrorAction SilentlyContinue | Remove-Item -Recurse
最正确的例外选择是
if (test-path $p) { rm $p }
版本
评论
您可能正在寻找别名。@Mast,别名只是命令的替代名称。您不能在别名定义中指定参数或任何其他内容。