gpt4 book ai didi

arrays - 为什么我不能在 Powershell 的 foreach 循环中查找数组索引?

转载 作者:行者123 更新时间:2023-12-02 22:40:39 25 4
gpt4 key购买 nike

第一个问题在这里,如果我犯了任何错误,请原谅我,我会尽量遵守指导方针。

我正在尝试编写一个 PowerShell 脚本,该脚本根据我通过 CSV 文件读入的数据填充两个数组。我正在使用数组来交叉引用目录名称,以便重命名每个目录。一个数组包含目录的当前名称,另一个数组包含新名称。

到目前为止,这一切似乎都有效。我成功地创建并填充了数组,并使用简短的输入和索引查找来检查我的工作,我可以在一个数组中搜索当前名称并成功地从第二个数组中检索到正确的新名称。但是,当我尝试在遍历每个目录名称的 foreach 循环中实现此代码时,我无法查找数组索引(它一直返回为 -1)。

我使用此处找到的第一个答案中的代码作为我的模板。 Read a Csv file with powershell and capture corresponding data .这是我对输入查找的修改,效果很好:

$input = Read-Host -Prompt "Merchant"

if($Merchant -contains $input)
{
Write-Host "It's there!"
$find = [array]::IndexOf($Merchant, $input)
Write-Host Index is $find
}

这是我的 foreach 循环,它尝试使用索引查找,但每次都返回 -1。但是我知道它正在查找文件,因为它输入 if 语句并打印“它在那里!”

foreach($file in Get-ChildItem $targetDirectory)
{
if($Merchant -contains $file)
{
Write-Host "It's there!"
$find = [array]::IndexOf($Merchant, $file)
Write-Host Index is $find
}
}

我想不通。我是 PowerShell 新手,所以这可能是一个简单的语法问题,但它似乎应该可以工作,但我找不到哪里出错了。

最佳答案

您的问题似乎是 $Merchant 是文件名的集合(类型为 string),而 $file 是一个 FileInfo对象。

-contains 运算符期望 $file 是一个字符串,因为 $Merchant 是一个字符串数组,并且按您预期的方式工作(因为 FileInfo.ToString() 只返回文件名)。

IndexOf() 并不是那么宽容。它认识到 $Merchant 中的所有项目都不是 FileInfo 类型,因此它永远不会找到 $file

您可以直接引用文件名:

[array]::IndexOf($Merchant,$file.Name)

或者,如 @PetSerAl 所示,将 $file 转换为字符串:

[array]::IndexOf($Merchant,[string]$file)
# or
[array]::IndexOf($Merchant,"$file")
# or
[array]::IndexOf($Merchant,$file.ToString())

最后,您可以直接在数组上调用IndexOf(),无需使用静态方法:

$Merchant.IndexOf($file.Name)

关于arrays - 为什么我不能在 Powershell 的 foreach 循环中查找数组索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31885554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com