首页 > 解决方案 > 当您在数组中执行 custum 对象时跳过 line powershell

问题描述

如果 $array 中有某些单词(当前行),我想跳过 $array 中的一行

 Get-Content -path $inDirFile | foreach{ # Read test.txt file and handle each line with foreach
                $array += [PSCustomObject]@{
                    If ([string]::IsNullOrWhitespace($array) -Or $array -Match "=" -Or $array -Match "PAGE" -Or $array -Match "MENUITM" -Or $array -Match "----" -Or $array -Match "USER") {
                    continue
                    }
                    else{
                    Field1 = $_.substring(1,12).Trim();
                    Field2 = $_.substring(13,11).Trim();
                    Field3 = $_.substring(25,2).Trim();
                    Field4 = $_.substring(28,2).Trim();
                    Field5 = $_.substring(31,2).Trim();
                    Field6 = $_.substring(34,2).Trim();
                    Field7 = $_.substring(41); # Substring from index 41 to the end of line
                    }
                }
}   

标签: arrayspowershelllineskip

解决方案


主要的代码问题是您不能将if语句放在[PSCustomObject]构造函数中。

您还尝试在使用 时比较以前的结果$array,您应该使用$_所有需要引用当前行的内容。

您还可以通过以下方式让生活更轻松:

  • 构造正确的正则表达式而不是使用多个-match语句
  • 否定 if 语句以避免使用continue

“固定”代码如下所示:

$array = @()
Get-Content $inDirFile | Foreach-Object {
    if (-not ( [string]::IsNullOrWhiteSpace($_) -or $_ -match "=|PAGE|MENUITM|----|USER" ) ){
        $array += [PSCustomObject]@{
            Field1 = $_.Substring(1, 3).Trim()
            Field2 = $_.Substring(5, 3).Trim()
            Field3 = $_.Substring(10,3).Trim()
        }
    }
}

推荐阅读