考虑到最后一场比赛,Powershell预测$ line

时间:2015-09-08 07:36:02

标签: powershell foreach match

我希望列出所有匹配,但我只是在输出文件中获得最后一个匹配。

输入文件(ADO):

TOTAL 0000002500
TAX   0000000000
TOTAL 0000001250
TAX   0000002520
TOTAL 0000006250
TAX   0000001820
TOTAL 0000007550
TAX   0000005820

Powershell脚本:

foreach ( $File in ( get-childitem -name $ADO))
{       foreach ($_ in ( Get-Content -path $ADO))
          {
           # Declaring Variable: Total_Amt
           if ( $_.substring(0,5) -Like "TOTAL")   {
           $TOTAL_AMT = $_.substring(6,10)
            }
            }
            # iterate through ADO file and using above declared variables
        foreach ($_ in ( Get-Content -path $ADO))
         {      
          "TOTAL_AMT" + $TOTAL_AMT  >   $ADO_TMP
         }
  }

输出文件(ADO_TMP):

TOTAL_AMT0000007550

预期输出文件:

TOTAL_AMT0000002500
TOTAL_AMT0000001250
TOTAL_AMT0000006250
TOTAL_AMT0000007550

SOLUTION:

我通过对脚本进行一些调整来解决问题。 谢谢你的帮助。

foreach ($_ in ( Get-Content -path $ADO))
{       
         if ($_.substring(0,5) -like "TOTAL") 
         {$TOTAL_AMT = $_.substring(6,10)
         "TOTAL_AMT" +  $TOTAL_AMT >>  $ADO_TMP
        } 
}

2 个答案:

答案 0 :(得分:1)

每次与$ADO_TMP匹配时,您都会覆盖>文件。您需要使用追加运算符>>

"TOTAL_AMT" + $TOTAL_AMT  >>   $ADO_TMP

答案 1 :(得分:0)

您还可以使用where过滤器来获得所需的输出:

Get-Content $ADO| where { $_ -like 'TOTAL*' } | Set-Content $ADO_TMP