You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell提取VCF字段导出CSV格式不符合预期如何解决

PowerShell解析VCF文件输出横向表格解决方案

问题现状

需要批量提取当前目录下所有vcf联系人文件的指定字段,输出为列对齐的多列表格,期望格式:

FN:        ORG:     Title         Tel:      Email:
Example A     Exam A    Exa A        EX A       EA
Example B     Exam B    Exa B        Ex B       EB

现有脚本运行后仅能逐行输出匹配到的零散字段,同时存在字段丢失、值匹配错误的问题,实际输出:

FN:Example A
ORG:Exam A
Title:Exa A
Tel: EX A
Email: ExA
FN: Example B
ORG:Exam B
Title: Exa A
Email: EX B

当前使用的代码:

ls *.vcf|%{cat $_ >>"result.txt"}     Get-Content "result.txt" |
Select-String -Pattern
'(FN:)|(ORG:)|(TITLE:)|(TEL;WORK;VOICE:)|(EMAIL;)'>>new.csv

问题原因

  • 脚本仅做了行匹配追加,没有按单个联系人维度分组解析,所有字段零散排列无法形成横向表格
  • 正则规则不严谨:EMAIL; 未匹配冒号分隔符,TEL;WORK;VOICE: 未做值提取,未处理字段值前后的多余空格
  • 无字段缺失兜底逻辑,匹配不到的字段直接丢失
  • 多次运行时>>追加模式会写入历史冗余内容,导致结果错乱

修正脚本

# 初始化联系人结果集
$contactList = @()

# 遍历目录下所有vcf文件
Get-ChildItem -Filter *.vcf | ForEach-Object {
    # 读取单个文件完整内容
    $vcfContent = Get-Content $_.FullName -Raw
    # 预定义所有需要的字段,默认值为空,避免字段缺失
    $contact = [PSCustomObject]@{
        'FN:'    = ''
        'ORG:'   = ''
        'Title:' = ''
        'Tel:'   = ''
        'Email:' = ''
    }
    # 逐字段匹配提取值,自动去除首尾多余空格
    if ($vcfContent -match 'FN:(.*?)(\r?\n|$)') { $contact.'FN:' = $matches[1].Trim() }
    if ($vcfContent -match 'ORG:(.*?)(\r?\n|$)') { $contact.'ORG:' = $matches[1].Trim() }
    if ($vcfContent -match 'TITLE:(.*?)(\r?\n|$)') { $contact.'Title:' = $matches[1].Trim() }
    if ($vcfContent -match 'TEL;WORK;VOICE:(.*?)(\r?\n|$)') { $contact.'Tel:' = $matches[1].Trim() }
    if ($vcfContent -match 'EMAIL;[^:]*:(.*?)(\r?\n|$)') { $contact.'Email:' = $matches[1].Trim() }

    $contactList += $contact
}

# 输出自动对齐的文本表格到文件
$contactList | Format-Table -AutoSize | Out-File -FilePath 联系人表格.txt -Encoding UTF8

# 若需要导出为Excel可识别的标准CSV,替换为以下命令即可
# $contactList | Export-Csv -Path 联系人列表.csv -NoTypeInformation -Encoding UTF8

使用说明

  • 脚本无需生成临时合并文件,直接逐个解析vcf,避免不同联系人字段混淆
  • 预定义字段兜底,匹配不到对应内容时自动留空,不会出现列错位、字段丢失问题
  • 正则兼容Windows和Unix风格的换行符,适配不同来源的vcf文件
  • Format-Table -AutoSize会自动根据内容长度调整列宽,输出和期望格式一致的对齐效果
  • 导出CSV时使用UTF8编码,避免中文乱码

内容的提问来源于stack exchange,提问作者DylanC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 06:18:17