我需要导出多人的联系人,并以特定方式将制表符分隔文件修改为csv。导出的文件只有两列,名称和电子邮件,但我需要它是电子邮件、名称、名字、姓氏。我的脚本虽然可能很粗糙,并且我将其设置为作为 sendto 运行,但确实有效。如果有人没有列出第二个名字,我就会遇到问题。我可以在 split 周围添加 if 语句吗?当我尝试时它总是破裂
这是迄今为止我的代码。
"Received $($args.Count) files:"
foreach( $path in $args ) {
"Processing file: $path"
$filename = [System.IO.Path]::GetFileName($path)
}
Import-CSV -Path $path -Delimiter "," -Header Email, Name, FirstName, LastName | select -skip 4 |
ForEach-Object{
$first, $last = $_.Email -split " "
$_.FirstName = "$first"
$_.LastName = "$last"
$email = $_.Name
$_.Name = "$first $last"
$_.Email = $email
$_
} |
Export-CSV C:\Users\jjasper\Desktop\Composer\ContactExport\result\$filename -Delimiter "," -NoTypeInformation
(Get-Content -Path C:\import\$filename ).Replace('"','') | Set-Content -Path C:\import\$filename
(Get-Content -Path C:\import\$filename ) | ? {$_.trim() -ne "" } | set-content C:\import\$filename
如果没有 csv 内容的一些示例,很难为您提供帮助。但是,我认为您应该尝试使用对象来按照您想要的方式操作数据,例如,如果您的 CSV 有 4 个标头,那么您可以使用它来执行此操作。
$csvImport = Import-CSV -Path $path -Header Email, Name, FirstName, LastName
$reOrderExport=@()
foreach($row in $csvImport){
$obj=[PSCustomObject]@{
Name = $row.FirstName + $row.LastName
email = $row.Email
userName = ($row.Email -split '@')[0]
familiyName = if($row.LastName -like ''){
'noLastName'
}else{
$row.LastName
}
}
$reOrderExport+=$obj
}
$reOrderExport | Export-CSV -Path $exportPath -NoTypeInformation
您只需获取所有 CSV 内容并处理导入的数据以生成所需的数组,然后导出该数组,或者如果您查看 csv 列表,则继续将其添加到文件中。