Windows Powershell Export-CSV列/行值作为文件名

时间:2014-01-20 12:22:36

标签: powershell

我遇到了Powershell的问题。我需要导入一个csv文件,格式化并导出它。

现在其中一个字段在每一行都是相同的值,因此我想将导出文件命名为与单元格值相同。

我用

导入csv
    Import-Csv c:\tmp\200114.csv

使用

格式化输出
    Select-Object @{expression={$_.code}; label='ID NUMBER'} etc etc but one of the fields being DESCRIPTION

然后导出:

    Export-Csv -NoTypeInformation c:\tmp\test1.csv

所以基本上我想把文件命名为如下所示,其中DESCRIPTION是字段名称,行是1(因为它们都是相同的):

    Export-Csv -NoTypeInformation c:\tmp\@{expression={$_.DESCRIPTION[1]};}.csv

但我得到:

Export-Csv:无法验证参数'Delimiter'的参数。参数为null。提供非null参数和tr 再一次命令。

理想情况下,我希望文件名为:

今日日期 - 描述列ROW 1 Value.csv

非常感谢任何输入......

样本数据:

ID IDBER,NAME,ADDRESS 1,ADDRESS 2,CITY,STATE,ZIP,Spare,PHONE#,DESCRIPTION,Spare,Spare,VALUE 1,姓名1,地址1,地址2,城市1,州1,邮编1 ,,电话1,CC098-1 ,,, NCV 2,姓名2,地址2,地址3,城市2,州2,邮编2,电话2,CC098-1 ,,, NCV


谢谢,我非常感谢。我正在努力让这个工作。它必须与:

    Select @{n='ID NUMBER';e={$_.code}}, @{n='DESCRIPTION';e={...}} 

我不知道Select命令并且找不到任何内容,我甚至看不出n =& e =等正在做。我把它修剪成:

    $csv = Import-Csv c:\tmp\200114.csv | Select-Object @{expression={$_.code}; label='ID NUMBER'} | $filename = "$(Get-Date -f 'yyyy-MM-dd') - $($csv[0].DESCRIPTION).csv" | $csv | Export-Csv $filename -NoTypeInformation 

但我只是得到错误:

表达式仅允许作为管道的第一个元素。 在行:1字符:108

    + $csv = Import-Csv c:\tmp\200114.csv | Select-Object @{expression={$_.code}; label='ID NUMBER'} | $filename  <<<< = "$
    (Get-Date -f 'yyyy-MM-dd') - $($csv[0].DESCRIPTION).csv" | $csv | Export-Csv $filename -NoTypeInformation
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline

再次感谢。

1 个答案:

答案 0 :(得分:0)

在变量中捕获已处理的CSV:

$csv = Import-Csv c:\tmp\200114.csv | Select @{n='ID NUMBER';e={$_.code}},
         @{n='DESCRIPTION';e={...}},
         ...

构建您的文件名:

$filename = "$(Get-Date -f 'yyyy-MM-dd') - $($csv[0].DESCRIPTION).csv"

然后导出数据:

$csv | Export-Csv $filename -NoTypeInformation