Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell—将数据字段中有逗号的两个CSV合并在一起,将其中一个数据逗号解析为分隔符_Powershell_Csv - Fatal编程技术网

Powershell—将数据字段中有逗号的两个CSV合并在一起,将其中一个数据逗号解析为分隔符

Powershell—将数据字段中有逗号的两个CSV合并在一起,将其中一个数据逗号解析为分隔符,powershell,csv,Powershell,Csv,我在$mailboxPath和$mailboxStatisticsPath中找到了2个CSV。我正在使用此代码将两者合并在一起。我所说的合并是指: $mailboxPathCSV有4列:A,B,C,D。$mailboxStatisticsPathCSV有两列:E,F 合并后的CSV将有以下列:A,B,C,D,E,F 我使用此代码执行此操作: $csv1 = @(gc $mailboxPath) $csv2 = @(gc $mailboxStatisticsPath) $combinedMailb

我在
$mailboxPath
$mailboxStatisticsPath
中找到了2个CSV。我正在使用此代码将两者合并在一起。我所说的合并是指:

$mailboxPath
CSV有4列:
A
B
C
D
$mailboxStatisticsPath
CSV有两列:
E
F

合并后的CSV将有以下列:
A
B
C
D
E
F

我使用此代码执行此操作:

$csv1 = @(gc $mailboxPath)
$csv2 = @(gc $mailboxStatisticsPath)
$combinedMailbox = @()
for ($i=0; $i -lt $csv1.Count; $i++) {
    $combinedMailbox += $csv1[$i] + ', ' + $csv2[$i]
}
# Output to file
$combinedMailbox | Out-File "$dirname\CombinedMailbox.csv" -encoding default
$mailboxStatisticsPath
文件中,第一列包含包含逗号的数据,例如:
Smith,John
。第二列还包含包含逗号的数据,例如:
513.4kb(525772字节)

当上面的代码运行时,它取第一列并将逗号作为分隔符,将行
Smith,John
拆分为
E
列中的
Smith
,以及
F
列中的
John
,这是不正确的

为什么它将
Smith,John
逗号作为分隔符,而将文件大小值中的逗号作为数据的一部分,而不将其作为分隔符处理?是否因为第一个单元格中逗号后有空格,而第二个单元格中没有空格

如果是这种情况,我如何按照上面定义的方式正确合并两个CSV,而不根据是否有带空格的逗号将数据拆分为多个不同的单元格

编辑: 以下是完整的powershell脚本:

Set-ExecutionPolicy RemoteSigned

# Connect to exchange online
Connect-ExchangeOnline -Credential $UserCredential -ShowProgress $true

# Read the client name
$clientName = Read-Host 'Client name?'
$dirname = "sample_path\$clientName"

# Create folder
New-Item -ItemType Directory -Force -Path $dirname

# Setup mailbox and mailbox statistics CSV paths. If they exist, remove them first.
$mailboxPath = "$dirname\Mailbox.csv"
$mailboxStatisticsPath = "$dirname\MailboxStatistics.csv"
rm $mailboxPath -ea ig
rm $mailboxStatisticsPath -ea ig

# Get the user mailbox data
$mailbox = Get-Mailbox
# Add client name as a property to the mailbox object
$mailbox | Add-Member -NotePropertyName ClientName -NotePropertyValue $clientName -Force
$mailbox | Select-Object Name, ArchiveStatus, ArchiveWarningQuota, ClientName, ProhibitSendQuota, ProhibitSendReceiveQuota | Export-Csv $mailboxPath -notypeinformation
# Get the user mailbox statistics data
$mailbox | select -expand userprincipalname | Get-MailboxStatistics | Select-Object DisplayName, TotalItemSize | Export-Csv $mailboxStatisticsPath -notypeinformation

#Import the CSVs
# Create an Empty Array
$csv1 = @(gc $mailboxPath)
$csv2 = @(gc $mailboxStatisticsPath)
$combinedMailbox = @()
for ($i=0; $i -lt $csv1.Count; $i++) {
    $combinedMailbox += $csv1[$i] + ', ' + $csv2[$i]
}
# Output to file
$combinedMailbox | Out-File "$dirname\CombinedMailbox.csv" -encoding default

# Delete the originals
# Remove-Item $mailboxPath
# Remove-Item $mailboxStatisticsPath
Disconnect-ExchangeOnline
来自
$mailboxStatisticsPath
的示例数据:

"DisplayName","TotalItemSize"
"Smith, John","513.4 KB (525,772 bytes)"

使用
Import Csv
而不是
gc
/
获取内容
请使用
$mailboxStatisticsPath
中的完整样本行更新您的问题,包括标题行。如果您正在创建Csv,您似乎也可以使用不同的分隔符导出,我建议将
,“
更改为
”,“
,但除此之外,没有明显的问题,因为字段是双引号的,这消除了嵌入的
字符的歧义。使用
导入Csv
而不是
gc
/
获取内容
请使用
$mailboxStatisticsPath
中的完整样本行更新您的问题,包括标题行。如果您正在创建Csv,您可能也可以使用不同的分隔符导出,我建议更改
,“
”,“
,但除此之外,没有明显的问题,因为字段是双引号,这消除了嵌入的
字符的歧义。从句法上来说。