PowerShell中如何通过列位置而非表头名引用CSV列?
PowerShell按列位置引用CSV列的实现方法
完全可以通过列的位置而非表头名称来引用CSV列,不用依赖每次可能变化的表头。
核心思路是利用PowerShell自定义对象的PSObject.Properties属性,它会按CSV文件中的原始列顺序返回所有列的属性集合,通过索引(从0开始计数)就能定位到目标列。
针对你给出的示例代码,假设原代码中:
- 用于比较的列M是第2列(索引1)
- 用于比较的列N是第3列(索引2)
- 需要赋值的列K是第1列(索引0)
修改后的代码如下:
| ForEach-Object { # 获取当前行的所有列属性,顺序与CSV文件一致 $allColumns = $_.PSObject.Properties # 按索引获取对应列的值 $colMValue = $allColumns[1].Value $colNValue = $allColumns[2].Value # 获取要赋值的列属性对象 $colK = $allColumns[0] # 执行判断逻辑并赋值 if ($colMValue -gt $colNValue) { $colK.Value = 'Y' } else { $colK.Value = 'N' } # 返回修改后的行对象 $_ } |
关键说明:
- 索引从0开始,比如第1列对应索引0,第2列对应索引1,以此类推
- 通过
$allColumns[索引].Value读取列的值,通过修改$allColumns[索引].Value来更新列内容,这样会同步到原对象上 - 这种方法完全不依赖表头名称,不管CSV列数多少、表头怎么变,只要目标列的位置固定就能正常工作
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

