-ne到$ null将不起作用

时间:2018-05-09 18:37:21

标签: powershell csv null

我正在使用带有13个增量列“access1,access2,..”的CSV在PowerShell中工作,我试图单步执行并从访问列不为空的每一行导出“crednum”,并使用每列的新CSV。我已经尝试过(-ne $null)和(-ne " ")两个人都会给我信条栏的全部内容,我不知道我做错了什么。

$a = 1

do {
    $column = ("access" + $a)
    $outpath = "C:\Test\" 

    $access = Import-Csv 'C:\import.csv' |
              where {$_.$column -ne " "} |
              select crednum

    $a

    $access | Export-Csv ($outpath + $column + ".csv") -NoTypeInformation

    $a++
} while ($a -le 13)

1 个答案:

答案 0 :(得分:2)

空字符串不等于$null,并且它不等于单个空格" "。它等于""''[String]::Empty。但是,通常最好将[String]::IsEmptyOrWhitespace()函数用于此类事情,因为它涵盖了更多的角落情况,例如列 null时,或单个空格或空字符串。

您还要在每个循环中导入整个CSV。这是浪费精力,因为每次迭代都必须处理整个文件。

尝试这样的事情:

$Columns = 1..12 | ForEach-Object { "access$_" }

$Access = Import-Csv 'C:\import.csv'

foreach ($Column in $Columns) {
    $Access |
        Where-Object { -not [String]::IsNullOrWhiteSpace($_.$Column) } |
        Select-Object -Property crednum |
        Export-Csv -LiteralPath ($outpath + $Column + ".csv") -NoTypeInformation
}