【问题标题】:powershell foreach-object with if statements带有 if 语句的 powershell foreach-object
【发布时间】:2012-06-20 20:28:27
【问题描述】:

我正在尝试运行这个脚本,它基本上从文本文件中读取/解释文本并将“键”和“值”存储到哈希表中。现在我想在从文本文件中读取文本时更改特定的键和值。

以下是我文件中的文本:

line1 = apple  
line2 = firetruck  
line3 = cricket  
line4 = gorilla  
line5 = elephant  
line6 = banana  
line7 = jumper  
line8 = hat  
line9 = deer  
line10 = igloo  

这是我的代码:

param
(
    [Parameter(Mandatory=$true,  HelpMessage="Please specify the text filename.")]$fileName
)


$hashTable = @{}
$textFile = Get-Content $filename | ForEach-Object `
{
    $equalindex = $_.IndexOf("=")
    $key = $_.Substring(0,$equalindex)

    if($key -like "line2")
    {
        $key = "line2 has been changed"
    }

    $remainingLen = (($_.Length - 1) -$equalindex)
    $value = $_.Substring($equalindex +1, $remainingLen)

    if($value -like "value2")
    {
        $value = "value2 has been changed"
    }

    $hashtable.Add($key,$value)
} 

$hashtable.Set_Item("line5","line5 value has been changed")
$hashtable.GetEnumerator() | Sort-Object name

当我运行我的代码时,它会输出哈希表,但不会更改我的“line2”键或“value2”值。这是做我想要完成的事情的正确/最合乎逻辑的方式吗?

【问题讨论】:

    标签: powershell if-statement foreach hashtable powershell-2.0


    【解决方案1】:

    我认为尾随空格让你失望。

    改变这个:

    $key = $_.Substring(0,$equalindex)
    

    到这里:

    $key = $_.Substring(0,$equalindex).Trim(' ')
    

    或者索引可能已关闭,因为这似乎也有效:

    $key = $_.Substring(0,$equalindex - 1)
    

    【讨论】:

      【解决方案2】:

      您需要删除前导和(或)尾随空格。试试这个:

      $ht=@{}
      
      Get-Content $filename | foreach{
      
          $key,$value = $_.Split('=') | foreach {$_.Trim()}
      
          if($key -like "line2")
          {
             $key = "line2 has been changed"
          }
      
          if($value -like "value2")
          {
              $value = "value2 has been changed"
          }
      
          $ht.Add($key,$value)
      }
      
      $ht.GetEnumerator() | Sort-Object name
      
      
      Name                           Value                                                                                                                                     
      ----                           -----                                                                                                                                     
      line1                          apple                                                                                                                                     
      line10                         igloo                                                                                                                                     
      line2 has been changed         firetruck                                                                                                                                 
      line3                          cricket                                                                                                                                   
      line4                          gorilla                                                                                                                                   
      line5                          elephant                                                                                                                                  
      line6                          banana                                                                                                                                    
      line7                          jumper                                                                                                                                    
      line8                          hat                                                                                                                                       
      line9                          deer   
      

      【讨论】:

      • @ray023 我很抱歉,我在发布文本时包含了这些空格,因此它会添加一个换行符,但是当网站告诉我它的格式不正确时忘记将其取出. (我需要在我的文本文件文本中添加“代码”缩进)。所以我的文本文件中的文本没有任何尾随空格。很抱歉造成混乱
      • 啊抱歉 Shay 和 @ray023 我看到了你所说的我刚刚实现了代码并且它工作了谢谢。我将不得不进一步阅读 Split 命令。我也刚刚意识到我正在搜索文本“value2”而不是“firetruck”,这是第 2 行的实际值,这就是该值没有改变的原因。感谢您的快速回复,感谢您的帮助
      猜你喜欢
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2017-01-13
      相关资源
      最近更新 更多