我在文件夹中设置了 CSV 文件。我想将文件转换为 TSV 文件格式。我想同样使用Powershell
。
我尝试使用以下脚本。这是投掷错误。
Get-ChildItem "C:\Users\myname\Desktop\sampledata" | ForEach-Object { Import-Csv $_.FullName | Export-Csv {$_.Name} -Delimiter "`t" -Encoding UTF8 }
我收到的错误类似于以下内容:
Import-Csv:会员" 1"已经存在了。在行:8字符:72 + ...桌面\采样数" | ForEach-Object {Import-Csv $ _。FullName |出口...... + ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [Import-Csv],ExtendedTypeSystemException + FullyQualifiedErrorId:AlreadyPresentPSMemberInfoInternalCollectionAdd,Microsoft.PowerShell.Commands.ImportCs
如何解决此问题?
答案 0 :(得分:3)
该csv文件的第一行中的单元格中存在错误的相同值。这是命令import-csv的正常行为。
你可以找到CSV输出。
作为一种变通方法,您可以使用参数" -Header"指定表头:
Import-Csv xxx.csv -Header a,b,c,d
答案 1 :(得分:1)
在撰写本文时,该问题包含一个额外的偶然错误:{$_.Name}
用于指定输出文件名:但是,{$_.Name}
是脚本块在字符串上下文中评估其文字内容,即 literal $_.Name
。相比之下,目的是指定当前管道对象(Name
)的$_
属性作为文件名:$_.Name
本身将做 - 不需要引用或其他限定(尽管"$($_.Name)"
也可以在双引号字符串中工作。
功能
您收到的错误消息(member "<name>" is already present
)告诉您 重复值存在于输入CSV文件的第1行 (正如woxxom在评论中也注明了这一点。)
Import-Csv
要求输入文件的第1行包含列名 (必须是唯一的),并且数据行从第2行开始。
听起来您的输入文件缺少列名,因此您可以使用Import-Csv -Header <colName1>, <colName2>, ...
ad-hoc指定列名。
$null
。答案 2 :(得分:0)
试试这个
Get-ChildItem c:\temp\ -Filter "*.csv" | foreach{(Import-Csv $_.FullName -Delimiter ";") | export-csv $_.FullName -NoTypeInformation -Delimiter "`t" -Encoding UTF8}