2016-06-23 22 views
0

每天我都會獲得許多需要導入系統的CSV文件。但在我可以導入它們之前,我需要將它們全部編碼爲UTF-8,然後逐個上傳它們。這就是爲什麼我需要一個腳本,它將所有* .csv文件編碼爲UTF-8,然後將它們合併到一個文件中。Out-File製表符分隔文件問題

該腳本工作正常,但是當我導出該文件時,第一個選項卡已被刪除,這是一個大問題。

它是如何被編碼和合並前一個文件如下:

USERID ACTIVE FIRSTNAME LASTNAME EMAIL LANGUAGE HOSTPRIVILEGE TIMEZONE DIVISION DEPARTMENT PROJECT OTHER CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10 COUNTRY 
    Y <firstname> <lastname> <[email protected]> de <text> <text>       <randomnumber>    

(它看起來像,#2不喜歡選項卡或IM只是noobish ..:?S)

其實第二行從一個標籤開始,然後每個「塊」由一個標籤分隔。除最後一個之外,「text」和「randomnumber」之間有7個選項卡。

當我運行該腳本,它看起來像這樣:

USERID ACTIVE FIRSTNAME LASTNAME EMAIL LANGUAGE HOSTPRIVILEGE TIMEZONE DIVISION DEPARTMENT PROJECT OTHER CUSTOM5 CUSTOM6 CUSTOM7 CUSTOM8 CUSTOM9 CUSTOM10 COUNTRY 
Y <firstname> <lastname> [email protected] de <text> <text>       <randomnumber>    
Y <firstname> <lastname> [email protected] 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" 

編輯:我發現了一個「解決辦法」,我加了參數

ipcsv -delimiter "`t" 

,但我得到錯誤,當我的參數添加到的ConvertTo -CSV。所以現在用分隔符「,」輸出。但系統幸好能夠讀取導入它也逗號分隔。

回答

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 
+0

謝謝,這工作完美!我將最終的腳本「轉換」爲.exe,因此即使是「傻瓜」也應該可以使用它。但隨後卡巴斯基反病毒軟件將其識別爲木馬,哈哈。該死的。也許我會留在.ps1腳本.. 編輯:我用PS2EXE「轉換」腳本,如果有人想知道.. – Shunator

+0

嘗試使用PowerGUI(免費),也許你會更好地繞過卡巴斯基。在某種程度上,還必須有一個白名單系統。 – sodawillow