2017-06-28 53 views
2

我有我的代碼有問題,當我只有一個對象被顯示在文件中的文件中導出,一個例子應該會更好:在CSV導出多個對象文件的PowerShell

有結果:

 
Field1 
Test1 

而且我要得到這個:

 
Field1 col1 col2 Field2 col3 col4 
Test1 a  b  Test2  c  d 
     a2  b2    c2  d2 

文件:

 
col1 col2 
a  b 
a2  b2 

我已經盡了最大的努力來製作一段代碼,希望這會有所幫助。我在代碼中創建該字段。

$csv = Import-Csv .\file.csv -Delimiter ';' 
$dataTable = New-Object System.Data.DataTable 

$dataTable.Columns.Add("Field1") | Out-Null 


foreach ($s in "Test1") 
{ 
    $row = $dataTable.NewRow() 

    $row["Field1"] = $s 

    $dataTable.Rows.Add($row) 
} 

#my problem is there, I don't know how merge these two lines 
$dataTable | export-csv -NoTypeInformation -Path ".\fileResult.csv" 

$csv | Export-CSV -Path ".\fileResult.csv" -NoTypeInformation -Delimiter ";" -Append 
+0

你只需要添加一列的表...你不需要添加其他的嗎? – arco444

+0

Sry,我沒有顯示所有預期的文件,但我的問題在標題中。我有兩條線,我不知道如何合併,以獲得頂部的結果。或者,也許它不是被稱爲對象? – Teslo

回答

1

在你的例子中,你有標題和一行。我假設你會循環多行。

運行所有這些代碼會給你錯誤;要麼使用單行或循環版本。

$csv = Import-Csv .\file.csv -Delimiter ';' 

#Single line 
$csv | Add-Member -Type Noteproperty -Name "Field1" -Value "Test1" 
$csv | Add-Member -Type Noteproperty -Name "Field2" -Value "Test2" 

#looping over all lines 
foreach($line in $csv({ 
    $line | Add-Member -Type Noteproperty -Name "Field1" -Value "Test1" 
    $line | Add-Member -Type Noteproperty -Name "Field2" -Value "Test2" 
} 

# use Select-Object to get orders CSV 
$csv | Select-Object Field1, col1, col2, Field2 | Export-CSV -Path ".\fileResult.csv" -NoTypeInformation -Delimiter ";" -Append 

編輯:一些解釋

CSV文件導入爲一個對象。標題(col1col2)被自動指定爲對象的NoteProperty成員。你可以通過運行$csv | Get-Member來看到。

您可以使用Add-Member將成員添加到CSV對象,指定成員類型,名稱(標題)和值。

文檔

Import-Csv
Add-Member
Export-Csv
Select-Object

+0

你的代碼有錯誤嗎?有隻有一個「(」。 – Teslo

+0

當我運行你的代碼時,我有兩個字段後,有可能在第一個單元格有'Field1'? – Teslo

+0

@Teslo是的,如果你運行它所有。 ;或者使用單行版本(它會給你問題中的結果)或多行(如果你在csv中有多行),使用多行(正確的就是你想要的)使用兩行將會產生錯誤 – gms0ulman