我想传递序列计数以用于 Try/Catch 错误处理。如果我的代码捕获到错误,我希望能够返回类似“4 个文件中的第 2 个失败”的内容,而不会归咎于序列变量。到目前为止,我有以下内容:
($hash = @(Get-ChildItem C:\Dir -Recurse -Include *.txt) | Where {$_.length -gt 0}) | ForEach-Object {
Write-Host $_.BaseName
Write-Host $hash.IndexOf($_)
}
"Array Count = $($hash.Count)"
这将输出:
File1
0
File2
1
Array Count = 2
我不确定如何在循环外获取索引号。
答案1
答案:使用全局变量。
在语句中添加ForEach-Object
如下内容:
$x = $hash.IndexOf($_);
当循环停止时,变量$x
将包含索引号。
答案2
实际上只是更多相同的内容(以及对 PowerShell 格式支持的测试)。
($Hash = Get-ChildItem C:\Dir -Force -Include *.txt -Recurse -ErrorAction SilentlyContinue | Where-Object -FilterScript { $_.Length -gt 0 }) |
ForEach-Object -Begin { "There are $($Hash.Count) non-zero length items.`r`n" } -Process { '{0:000} {1}' -f ($Hash.IndexOf($_) + 1), $_.Name }
可能会输出:
There are 3 non-zero length items.
001 This.txt
002 That.txt
003 And The Other Thing.txt