Windows Powershell重命名列标题CSV文件

时间:2014-01-10 10:14:21

标签: powershell

发布此内容的道歉但我无法解决如何使用Windows PowerShell重命名csv文件中的列标题这样的基本操作。我可以添加新的,删除,填充,导出但无法找到如何更改标题。

我想也许可以导入CSV&导出时指定了标题但不起作用:

    import-csv c:\tmp\test.csv | Select-Object first_name | Export-Csv -header "test" c:\tmp\test1.csv

我基本上需要重新格式化CSV文件,以便我可以选择我想要的数据&指定完美的新标题。

当然这应该是直截了当的我必须遗漏一些明显的东西......

3 个答案:

答案 0 :(得分:11)

您可以Select-Object使用calculated property来执行此操作。

 Import-Csv test.csv |
     Select-Object @{ expression={$_.first_name}; label='test' } |
         Export-Csv -NoTypeInformation test1.csv

答案 1 :(得分:8)

你不能尝试像:

import-csv 'c:\tmp\test.csv'  | select -Property @{name="test";expression={$($_.first_name)}}| Export-Csv c:\tmp\test1.csv

答案 2 :(得分:0)

我知道这已经回答了,但是这是另一种方法,用于需要更改一个(或几个)列而无需对每个列进行硬编码的情况。

function Convert-Object($rec){
    $object = New-Object System.Object
    $members = ($rec[0].psobject.Members | ?{$_.MemberType -match "Property"}).Name.Trim()
    foreach($mem in $members){
        if($mem -eq 'File Number'){
            $object | Add-Member -MemberType NoteProperty -Name "FileNumber" -Value $rec.'File Number'
        }else{
            $object | Add-Member -MemberType NoteProperty -Name $mem -Value $rec.$mem
        }
    }
    return $object 
}

$convCSV   = ($CSVs | ?{$_.Name -match "YourCsvName"}).FullName #multiple CSVs perhaps
$toConvert = Import-Csv $convCSV
$convObjs  = New-Object System.Collections.ArrayList
$toConvert | foreach{$convObjs += Convert-Object -rec $_}
$convObjs  | Export-Csv $convCSV -NoTypeInformation