在PowerShell中使用分号拆分CSV文件

时间:2017-05-25 04:46:09

标签: powershell csv

这是我系统中的模板,所以我不能在这里修改任何内容。基本上我想根据第3栏“评论”的值分成多个文件。

DeliveryType;ShippingDate;Comment;SellerSku;Requested
send;05/29/16 03:10 PM;HCM - VN101YK- MK1001;EX110OTBCE8QV;3
send;05/29/16 03:1PM;HN - VN101YK;EX110OTBCE8XHY;1

我已经尝试过此代码&更改了文件名/文件夹,但它没有响应任何内容。

{{1}}

2 个答案:

答案 0 :(得分:2)

我实际上根本不认为您需要使用Group来执行此操作:

$CSV = Import-csv test.csv -Delimiter ';'

$CSV | ForEach-Object {
    $_ | Export-CSV "$($_.comment).csv" -Append -NoTypeInformation
}

<强>解释

  • 使用Import-CSV导入CSV,指定文件由分号分隔(默认情况下为逗号)。
  • 将导入的结果导入ForEach-Object循环
  • 在循环内$_表示管道中的当前项(例如CSV中的当前行),我们可以使用.表示法访问其属性。
  • 获取CSV中的当前行,并将其附加到带有其名称的CSV文件中。我们使用子表达式运算符$( )从双引号字符串中访问当前管道对象的.comment属性。
  • 另请注意,我认为-Append开关要求您使用PowerShell版本3或更高版本。
  • 此命令还包括-NoTypeInformation开关,它会阻止PowerShell在输出顶部放置不必要的对象描述注释行,如果您在Excel中打开该文件,则可能会很烦人。< / LI>

答案 1 :(得分:0)

由于以下两个原因,您的代码无效: 1.它试图默认用逗号分析csv文件分隔,而不是分号。您可以通过添加-Delimiter';'来解决此问题。 to Import-Csv cmd-let,例如: Import-Csv test.csv -Delimiter';'

  1. $ _是通过|而非$
  2. 传送到下一个命令的对象

    以下是可行的代码:

    Import-Csv test.csv -Delimiter ';' | Group-Object -Property "Comment" | Foreach-Object { $path=("C:\pathto-output-files\" + $_.Name + ".csv"); Export-Csv -InputObject $_ -Path $path -NoTypeInformation}