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

在PowerShell中使用分号拆分CSV文件,powershell,csv,Powershell,Csv,这是我系统中的模板,因此我无法在此处修改任何内容。基本上,我想根据第3列“Comment”上的值将其拆分为多个文件 由于以下两个原因,您的代码无法工作: 1.它试图解析csv文件,默认情况下使用逗号分隔,而不是分号。您可以通过添加-分隔符“;”来解决此问题要导入Csv cmd let,例如: 导入Csv test.Csv-分隔符“;” $是由|传递到下一个命令的对象,而不是$ 下面是可以工作的代码: Import-Csv test.csv -Delimiter ';' | Group-Objec

这是我系统中的模板,因此我无法在此处修改任何内容。基本上,我想根据第3列“Comment”上的值将其拆分为多个文件


由于以下两个原因,您的代码无法工作: 1.它试图解析csv文件,默认情况下使用逗号分隔,而不是分号。您可以通过添加-分隔符“;”来解决此问题要导入Csv cmd let,例如: 导入Csv test.Csv-分隔符“;”

  • $是由|传递到下一个命令的对象,而不是$
  • 下面是可以工作的代码:

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

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

    $CSV = Import-csv test.csv -Delimiter ';'
    
    $CSV | ForEach-Object {
        $_ | Export-CSV "$($_.comment).csv" -Append -NoTypeInformation
    }
    
    说明:

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

    嗨,安斯加,谢谢你的帮助。仅供参考,我对Powershell一无所知。这些代码仅仅是从其他站点复制的。虽然有错误,但它实际上从同一个所有者分割为2个文件,但它仅基于1个所有者进行分割。(我的原始文件有两个所有者,一个所有者有两个文件。如果正确,它应该有4个文件)。(请参阅链接:prntscr.com/fbwahc,但当我再次尝试时,它不起作用。请参阅链接:prntscr.com/fbwapt。您可以帮助检查吗?错误表明“注释”中有字符)字段无效,无法在路径中使用,例如:。若要修复,您需要检查源数据并确保没有非法字符。您好,Iggy,谢谢您的帮助。尝试了此操作。但也无效。请参阅img:
    Import-Csv test.csv -Delimiter ';' | Group-Object -Property "Comment" | Foreach-Object { $path=("C:\pathto-output-files\" + $_.Name + ".csv"); Export-Csv -InputObject $_ -Path $path -NoTypeInformation}
    
    $CSV = Import-csv test.csv -Delimiter ';'
    
    $CSV | ForEach-Object {
        $_ | Export-CSV "$($_.comment).csv" -Append -NoTypeInformation
    }