【问题标题】:Windows Powershell Export-CSV column/row value as filenameWindows Powershell Export-CSV 列/行值作为文件名
【发布时间】:2014-01-20 12:22:36
【问题描述】:

我在使用 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:无法验证参数“分隔符”上的参数。参数为空。提供一个非空参数和 tr y 再次执行命令。

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

今天日期 - 描述列第 1 行值.csv

非常感谢您的任何意见......

样本数据:

ID NUMBER,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 

但我只是得到错误:

表达式只能作为管道的第一个元素。 在 line:1 char: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

再次感谢。

【问题讨论】:

  • 请从 CSV 文件中添加一些示例数据。
  • 当然,我必须放入虚拟数据,但标题是正确的:
  • selectSelect-Object 的别名。创建calculated properties 时,您可以使用@{name=...;expression=...}@{label=...;expression=...}namelabelexpression可以分别缩写为nle
  • 我认为这是有道理的。谢谢。

标签: powershell


【解决方案1】:

在变量中捕获处理后的 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

【讨论】:

  • 谢谢,对此我非常感激。我正在努力让这个工作。它必须与: Select @{n='ID NUMBER';e={$_.code}}, @{n='DESCRIPTION';e={...}} 我不知道 Select命令并且在上面找不到任何东西,我什至看不到 n= & e= 等在做什么。我将其修剪为 ---- $csv = Import-Csv c:\tmp\200114.csv |选择对象@{表达式={$_.code};标签='ID NUMBER'} | $filename = "$(Get-Date -f 'yyyy-MM-dd') - $($csv[0].DESCRIPTION).csv" | $csv | Export-Csv $filename -NoTypeInformation ----- 但我只是得到错误。 exp 只允许第一行...
  • @Paul 请不要在 cmets 中发布代码。它往往变得不可读。而是更新您的问题。还要添加您遇到的确切错误。
  • @Paul 你为什么要对这 3 个语句进行管道化?我没有告诉你这样做。
  • 抱歉在 ISE 中运行,您的正确操作确实有效。我没有意识到这是可能的,我总是从命令和管道语句运行.....非常感谢(Powershell新手,我通常使用AWK)。
  • 你能告诉我如何用这个指定文件的路径吗?我试过使用 -Path 但我无法绑定参数?
猜你喜欢
  • 2014-06-01
  • 1970-01-01
  • 2018-12-12
  • 2022-01-25
  • 2013-10-25
  • 1970-01-01
  • 2021-04-02
  • 2019-11-01
  • 2018-06-03
相关资源
最近更新 更多