另一个PowerShell noob问题。
我有一个包含企业名称的字符串数组,我正在编写一个脚本,它遍历目录的文件夹,并将文件夹名称与数组中包含的名称进行比较。当我找到匹配项时,我需要获取找到匹配项的数组索引。我使用以下代码成功完成了完全匹配:
foreach($file in Get-ChildItem $targetDirectory)
{
if($businesses -like "$file*")
{
$myIndex = [array]::IndexOf($businesses, [string]$file)
}
}
我使用-like "$file*"
的原因是因为有时候企业的名称有“LLC”或“INC”或类似的东西,当我们命名文件夹时偶尔也不包括(反之亦然)。我想修改我的$myIndex
行来查找这些索引。
我正在尝试使用
$myIndex = [array]::FindIndex($Merchant, {args[0] -like "$file*"})
但我收到了错误
无法找到“FindIndex”的重载和参数计数:“2”。
我尝试使用 [Predicate[string]]{args[0] -like "$file*"}
来投射第二个参数,但得到相同的结果。我已经阅读了该方法的文档,但我的一个基本问题是我不理解System.Predicate类型。我甚至不确定我是否正确地写它;我发现了一个类似但使用[int]
的示例。也许我说这一切都错了,但我觉得我很接近,无法在任何地方找到丢失的拼图。
提前感谢您的帮助。
答案 0 :(得分:0)
[Array]::FindIndex($Merchant, [Predicate[string]]{})
仅在$Merchant
类型为string[]
时才有效:
$Merchant
是一个字符串数组,有效:
PS C:\> $Merchant = 1,2,3 -as [string[]]
PS C:\> [array]::FindIndex($Merchant,[Predicate[String]]{param($s)$s -eq "3"})
2
$Merchant
是Int32
的数组,不起作用:
PS C:\> $Merchant = 1,2,3 -as [int[]]
PS C:\> [array]::FindIndex($Merchant,[Predicate[String]]{param($s)$s -eq "3"})
Cannot find an overload for "FindIndex" and the argument count: "2".
At line:1 char:1
+ [array]::FindIndex($Merchant,[Predicate[String]]{param($s)$s -eq "3"})
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
投射到Predicate[int]
时工作正常:
PS C:\> [array]::FindIndex($Merchant,[Predicate[int]]{param($s)$s -eq 3})
2