这可以用来计数*.jpg文件。
PS C:\> @([System.IO.Directory]::EnumerateFiles('C:\Users\Public\Pictures', '*.jpg', 'AllDirectories')).Count
8如何将-ErrorAction Continue应用于此?
PS C:\> @([System.IO.Directory]::EnumerateFiles('C:\Users', '*.jpg', 'AllDirectories')).Count
An error occurred while enumerating through a collection: Access to the path 'C:\Users\Administrator' is denied..
At line:1 char:1
+ @([System.IO.Directory]::EnumerateFiles('C:\Users', '*.jpg', 'AllDire ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~发布于 2019-01-16 15:06:51
我觉得你做不到。除非您想自己实现目录遍历,否则可能会遇到以下问题:
Get-ChildItem 'C:\Users' -Filter '*.jpg' -Recurse -Force -ErrorAction SilentlyContinue发布于 2019-01-30 05:33:16
Get-ChildItem,Ansgar Wiechers' helpful answer展示了一个使用的解决方案,这是使用完全的、只使用Windows的.NET Framework (FullCLR)时必需的,在此基础上构建了E 112Windows<代码>E 213。
相比之下,.NET Core v2.1+ -- PowerShell Core的基础--确实提供了一种解决方案:
@([System.IO.Directory]::EnumerateFiles(
'C:\Users',
'*.jpg',
[System.IO.EnumerationOptions] @{
IgnoreInaccessible = $true
RecurseSubDirectories = $true
}
)).Count请注意,这相当于-ErrorAction Ignore,而不是Continue (或SilentlyContinue),因为无法访问的目录被悄悄忽略,之后无法检查其中哪些目录是不可访问的。
上面的解决方案基于 overload,它提供了一个System.IO.EnumerationOptions参数。
发布于 2021-06-18 05:58:42
以上的答案围绕着这个问题展开。他们没有附加错误操作。
为了真正捕获.net调用中的错误操作,我在Windows中使用了$ErrorActionPreference变量,就像在https://devblogs.microsoft.com/scripting/handling-errors-the-powershell-way/中那样
# Store $ErrorActionPreference
$OldErrorActionPreference = $ErrorActionPreference
# Set $ErrorActionPreference for .net action
# see https://devblogs.microsoft.com/scripting/handling-errors-the-powershell-way/ for other values
$ErrorActionPreference = 'SilentlyContinue'
# .net call
@([System.IO.Directory]::EnumerateFiles('C:\Users\Public\Pictures', '*.jpg', 'AllDirectories')).Count
# restore origional $ErrorActionPreference
$ErrorActionPreference = $OldErrorActionPreferencehttps://stackoverflow.com/questions/54219607
复制相似问题