Out-File制表符分隔文件问题

时间:2016-06-23 08:27:10

标签: csv powershell delimiter

每天我都会获得许多我需要导入系统的CSV文件。但在我导入它们之前,我需要将它们全部编码为UTF-8,然后逐个上传它们。这就是我想要一个脚本的原因,该脚本将所有* .csv文件编码为UTF-8,然后将它们合并到一个文件中。

脚本工作正常,但是当我导出文件时,第一个选项卡已被删除,这是一个很大的问题。

一个文件在编码和合并之前的外观:

USERID  ACTIVE  FIRSTNAME   LASTNAME    EMAIL   LANGUAGE    HOSTPRIVILEGE   TIMEZONE    DIVISION    DEPARTMENT  PROJECT OTHER   CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10    COUNTRY
    Y   <firstname> <lastname>  <name@mail.com> de  <text>  <text>                          <randomnumber>              

(看起来,Stackoverflow不喜欢TAB?或者我只是为了noobish ..:S)

实际上第二行以一个标签开头,然后是每个&#34;块&#34;由一个标签分隔。除了最后一个,在&#34; text&#34;之间有7个标签。和&#34; randomnumber&#34;。

当我运行脚本时,它看起来像这样:

USERID  ACTIVE  FIRSTNAME   LASTNAME    EMAIL   LANGUAGE    HOSTPRIVILEGE   TIMEZONE    DIVISION    DEPARTMENT  PROJECT OTHER   CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10    COUNTRY
Y   <firstname> <lastname>  name@mail.com   de  <text>  <text>                          <randomnumber>              
Y   <firstname> <lastname>  name@mail.com   de  <text>  <text>                          <randomnumber>

第一个标签丢失。

这是PowerShell脚本:

Copy-Item ".\1_Input\*.csv" ".\2_cache"
Get-ChildItem ".\2_Cache\*.csv" | foreach {
  (Get-Content $_.FullName) | Set-Content $_.FullName -Encoding UTF8
}
ls ".\2_cache" -Fi *.csv | ipcsv |
  ConvertTo-Csv -NoTypeInformation |
  % { $_ -replace '"', ''} |
  Out-File ".\3_output\concat.csv" -fo -en utf8
Remove-Item ".\2_cache\*.csv"
编辑:我找到了一个&#34;解决方法&#34;,我添加了参数

ipcsv -delimiter "`t"

但是当我将参数添加到 ConvertTo-CSV 时出现错误。所以现在它用分隔符&#34;,#34;导出。但幸运的是,系统能够读取导入它也以逗号分隔。

1 个答案:

答案 0 :(得分:1)

如果你想要的只是将文件转换为UTF-8然后连接它们,从一个文件中获取标题行会更简单,然后在将它们写入输出文件时跳过所有文件的标题:

$files   = @(Get-ChildItem '.\1_Input\*.csv')
$outfile = 'concat.csv'

Get-Content $files[0] -TotalCount 1 | Set-Content $outfile -Encoding UTF8
$files | ForEach-Object {
  Get-Content $_.FullName | Select-Object -Skip 1
} | Add-Content $outfile -Encoding UTF8