我有这样的命令
dir "D:\BA1\xml-data\build-dir" -Directory | Where LastAccessTime -lt (Get-Date).AddDays(-22) | Remove-Item -Recurse
删除旧文件夹。在大多数情况下,它都有效。但是,有时这些文件夹包含隐藏文件,并且此作业会记录日志。 “您没有足够的访问权限来执行此操作。” <-这是有意的。
我不知道的是:
如果该命令无法删除至少一项,如何使整个作业失败(将错误代码设置为1并退出)。
答案 0 :(得分:2)
Your own answer有问题,因为它在 first 错误时退出,该错误是:
相反,最好让Remove-Item
完成对 all 目录的处理,只保留不可移动的目录,并确定之后是否发生错误 :
# Let the command run to completion and collect errors in $removalErrors.
dir "D:\BA1\xml-data\build-dir" -Directory |
Where LastAccessTime -lt (Get-Date).AddDays(-22) |
Remove-Item -Recurse -ErrorVariable removalErrors
# Exit with -1, if at least 1 error occurred, and with 0 otherwise.
exit (0, -1)[$removalErrors.Count -gt 0]
-ErrorVariable removalErrors
使用-ErrorVariable
公用参数来收集Remove-Item
在变量$removalErrors
中遇到的所有非终止错误。请注意,必须如何将变量的名称 不$
传递给参数。
这具有附加的优点,您可以检查$removalErrors
以确定与发生的特定路径有关的特定错误。
答案 1 :(得分:1)
当然,在发布问题后,答案就刚刚出现。
要解决我的问题,我需要使用add -ErrorAction Stop标志并将其包装为try catch
try{
dir "D:\BA1\xml-data\build-dir" -Directory | Where LastAccessTime -lt (Get-Date).AddDays(-22) | Remove-Item -Recurse -ErrorAction Stop
}
catch
{
exit -1
}