PowerShell嵌套循环内部循环不工作?

PowerShell嵌套循环内部循环不工作?,powershell,shell,loops,nested-loops,Powershell,Shell,Loops,Nested Loops,嗨,关于PowerShell的第一个问题 我需要写一个脚本,它需要一个日志文件,并在其中进行一些计算 我正在正确读取日志文件,然后创建两个数组,其中只包含我需要的文件行 $inVar = Select-String -path C:\Dev\Script\Ldorado.log -pattern "IN:" $outVar = Select-String -path C:\Dev\Script\Ldorado.log -pattern "OUT:" 我返回每一行,其

嗨,关于PowerShell的第一个问题

我需要写一个脚本,它需要一个日志文件,并在其中进行一些计算

我正在正确读取日志文件,然后创建两个数组,其中只包含我需要的文件行

$inVar = Select-String -path C:\Dev\Script\Ldorado.log  -pattern "IN:"             
$outVar = Select-String -path C:\Dev\Script\Ldorado.log -pattern "OUT:"
我返回每一行,其中有一个IN-IN-1数组,另一个是OUT-IN-1数组

我通过使用
.lines.split(“”)来拆分行,以便只获取每行中的日期

如果我有数组中的两个日期值,我可以使用
newtimespan
和一些转换来计算timespan

现在我需要以某种方式对文件中与模式匹配的每个条目执行此操作,因此我认为我需要一个循环,甚至是一个嵌套循环。我尝试了每个循环(for/foreach/foreachObject/while…),但没有成功

例如,如果您查看以下代码:

foreach ($out in $outVar) {
$testVar = $out.Line.Split("(")[0]
    foreach ($in in $inVar) {
        $testIn = $in.Line.Split("(")[0]
    }
    Write-Host $testVar + $testIn
}
我的输出如下所示:

12:55:49  + 13:20:31 
12:55:49  + 13:20:31 
12:55:49  + 13:20:31 
13:54:35  + 13:20:31 
13:54:35  + 13:20:31 
13:54:35  + 13:20:31 
16:37:44  + 13:20:31 
16:37:44  + 13:20:31 
16:37:44  + 13:20:31 
17:15:23  + 13:20:31 
17:15:23  + 13:20:31 
17:15:23  + 13:20:31 
 9:06:13  + 13:20:31 
 9:06:13  + 13:20:31 
 ...
将每个值设置为3次是正确的,因为每个日志都有IN和3OUT

外部循环似乎工作正常,但嵌套循环只获取最后一个值并打印它-相反,我希望与实际循环的外部循环具有相同的行为


有人知道我如何解决这个问题吗?

使用
for
循环,这样您就可以从每个数组中获取相同索引处的值(这假设
$outVar
$inVar
对齐且长度相同):


使用
for
循环,以便从每个数组中获取相同索引处的值(这假设
$outVar
$inVar
对齐且长度相同):


您可以将结果添加到数组中,然后以所需格式输出

#Empty arrays
$testIn_arr = @()
$testVar_arr = @()
foreach ($out in $outVar) {
$testVar = $out.Line.Split("(")[0]
$testVar_arr += @($testVar)
}

foreach ($in in $inVar) {
$testIn = $in.Line.Split("(")[0]
$testIn_arr += @($testIn)
}

for ($i = 0; $i -lt $testIn_arr.Count; $i++)
{
 Write-Host $($testVar_arr[$i]) + "+" + $($testIn_arr[$i])
}

您可以将结果添加到数组中,然后以所需格式输出

#Empty arrays
$testIn_arr = @()
$testVar_arr = @()
foreach ($out in $outVar) {
$testVar = $out.Line.Split("(")[0]
$testVar_arr += @($testVar)
}

foreach ($in in $inVar) {
$testIn = $in.Line.Split("(")[0]
$testIn_arr += @($testIn)
}

for ($i = 0; $i -lt $testIn_arr.Count; $i++)
{
 Write-Host $($testVar_arr[$i]) + "+" + $($testIn_arr[$i])
}

尝试将
Write Host
调用移动到内部循环中。@mklement0是正确的。之所以只写入一个
$testIn
,是因为
Write Host
位于嵌套的
foreach
循环之外,因此仅在该循环完成时运行。将Write Host调用移动到嵌套的for循环中并不能解决我的问题em.通过这样做,外部循环会对我的内部循环中的每个条目重复每个条目。尝试将
写入主机
调用移动到内部循环中。@mklement0是正确的。只有一个
$testIn
被写入的原因是
写入主机
在嵌套的
foreach
循环之外,因此仅在该循环出现时运行op已完成。将写主机调用移到嵌套的for循环中并不能解决我的问题。通过这样做,外部循环会对内部循环的每个条目重复每个条目。非常简单,只要我始终拥有与atm相同数量的输入输出,就行了-ThanksPretty simple,只要我始终拥有相同数量的输入输出,就行了自动取款机的输入和输出数量-感谢不坏,我会调查它-你的写主机会打印“+”3次:不坏,我会调查它-你的写主机会打印“+”3次:D