>我正在使用具有 13 个递增列"access1、access2,.."的 CSV 在 PowerShell 中工作,我正在尝试从访问列不为空的每一行中逐步导出"crednum",每列都有一个新的 CSV。我已经尝试过(-ne $null
(和(-ne " "
(都只会给我crednum专栏的全部内容,我不知道我做错了什么。
$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)
空字符串不等于$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
}