多个export-csv没有覆盖

时间:2013-03-25 15:21:54

标签: mysql powershell csv datatable

我有一个PowerShell脚本,其中2个export-csv到同一个文件。

但第二个export-csv会覆盖以前的csv文件。

我不想要这个。

对于第二个export-csv,我想将结果写入excel中的B列,所以我想在同一个csv文件中导出,但是要导出到第二列。

$ dataSet.Tables [“Query1”]返回:

COLUMN1
232

$ dataSet.Tables [“Query2”]返回:

COLUMN2
289

怎么做?

有我的剧本:

$mysql = New-Object MySql.Data.MySqlClient.MySqlConnection("server=$serv;port=$port;uid=$user;pwd=$password;database=$db;Pooling=False")
$mysql.Open()

$sqlquery1 = Get-Content "C:\query1.txt"
$sqlquery2 = Get-Content "C:\query2.txt"

$req = New-Object Mysql.Data.MysqlClient.MySqlCommand($sqlquery1,$mysql)
$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.Fill($dataSet, "Query1") | Out-Null
$dataSet.Tables["Query1"] | Export-Csv -path "C:\result.csv" -NoTypeInformation

$req2 = New-Object Mysql.Data.MysqlClient.MySqlCommand($sqlquery2,$mysql)
$dataAdapter2 = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req2)
$dataSet = New-Object System.Data.DataSet
$dataAdapter2.Fill($dataSet, "Query2")  | Out-Null

$dataSet.Tables["Query2"] | Export-Csv -path "C:\result.csv" -NoTypeInformation

$mysql.Close()

谢谢

4 个答案:

答案 0 :(得分:2)

作为@ C.B.提到,-Append在PowerShell 3.0之前的Export-Csv中不存在。你在PowerShell 2.0及更早版本中可以做的是这样的:

... | ConvertTo-Csv -NoTypeInformation `
    | select -Skip 1 `
    | Out-File "C:\result.csv" -Append

答案 1 :(得分:1)

查看Export-CSV help - -Append开关就是你所追求的。

答案 2 :(得分:1)

简单回答:你没有。您的查询返回不同的标头。

如果它们的值相同但列名不同,则应将第二个查询的结果转换为与第一个(column1)具有相同属性名的对象,并将两个查询的结果保存在两个查询中完成。

答案 3 :(得分:1)

这就是我如何解决它

$mysql = New-Object MySql.Data.MySqlClient.MySqlConnection("server=$serv;port=$port;uid=$user;pwd=$password;database=$db;Pooling=False")
$mysql.Open()

$sqlquery1 = Get-Content "C:\query1.txt"
$sqlquery2 = Get-Content "C:\query2.txt"

$req = New-Object Mysql.Data.MysqlClient.MySqlCommand($sqlquery1,$mysql)
$dataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req)
$dataSet = New-Object System.Data.DataSet
$dataAdapter.Fill($dataSet, "Query1") | Out-Null
$processrequest1 =  ($dataSet1.Tables["Query1"] | Format-Table -HideTableHeaders) | Out-String
$resultrequest1 = [int]$processrequest1

$req2 = New-Object Mysql.Data.MysqlClient.MySqlCommand($sqlquery2,$mysql)
$dataAdapter2 = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($req2)
$dataSet = New-Object System.Data.DataSet
$dataAdapter2.Fill($dataSet, "Query2")  | Out-Null
$processrequest2 =  ($dataSet1.Tables["Query2"] | Format-Table -HideTableHeaders) | Out-String
$resultrequest2 = [int]$processrequest2


$array1 = @() 
$array1 += New-Object psobject -Property @{Column1=$resultrequest1;Column2=$resultrequest2}
$array1 |  Export-Csv -path "C:\result.csv" -NoTypeInformation -Delimiter ";"

$mysql.Close()