我正在使用带有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)
答案 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
}