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

修改BAT批处理脚本 将VCF提取数据整理为Excel可导入格式

批处理实现方案

纯Windows自带批处理即可实现两种输出需求,不需要安装额外工具,直接替换原有脚本内容就能运行。


方案1:同字段值合并为逗号分隔单行

完全匹配你最初预期的输出格式,修正了字段含特殊字符时识别错误的问题,代码如下:

@Echo off
setlocal enabledelayedexpansion
cd /d %~dp0
:: 合并所有vcf文件
copy /B *.vcf master_list.txt >nul
:: 定义要提取的字段列表,用|分隔,不要修改分隔符
set "fields=FN|TITLE|ORG|EMAIL;|TEL;TYPE=WORK:"
:: 清空结果文件
type nul > results.txt

:: 遍历每个字段,提取值后合并为逗号分隔行
:parse_field
for /f "tokens=1* delims=|" %%a in ("%fields%") do (
    set "cur_field=%%a"
    set "fields=%%b"
    set "line=!cur_field!:"
    for /f "delims=" %%v in ('findstr /C:"!cur_field!:" master_list.txt 2^>nul') do (
        set "val=%%v"
        :: 去掉字段前缀,只保留值部分
        set "val=!val:*: =!"
        set "line=!line! !val!,"
    )
    :: 去掉末尾多余逗号写入结果
    if defined line echo !line:~0,-1! >> results.txt
)
if defined fields goto parse_field

pause

运行后生成的results.txt就会是同字段所有值用逗号分隔的单行格式。


方案2:转置为标准表格格式(可直接用Excel打开)

你需要的「字段为列头、单条名片占一行」的格式本质是标准CSV格式,直接双击就能用Excel打开,不会出现错位问题。注意:你原来把所有同字段结果直接堆在一起的写法会丢失「字段属于哪张名片」的对应关系,必须按VCARD名片块逐段提取才能保证数据匹配正确,实现代码如下:

@Echo off
setlocal enabledelayedexpansion
cd /d %~dp0
:: 合并所有vcf文件
copy /B *.vcf master_list.txt >nul
:: 初始化列配置
set "field_cnt=0"
set "header="
:: 配置表格列:格式为 call :add_col "VCF内字段前缀" "表格显示列头名",按需要增删即可
call :add_col "FN" "FN"
call :add_col "TITLE" "Title"
call :add_col "ORG" "Org"
call :add_col "EMAIL;" "Email"
call :add_col "TEL;TYPE=WORK:" "Work Tel"

:: 写入CSV表头
echo !header! > contacts.csv
:: 初始化单张名片的字段值存储
for /l %%i in (1,1,!field_cnt!) do set "v_%%i="
set "invcard=0"

:: 逐行遍历合并后的vcf文件,按单个名片块提取字段
for /f "delims=" %%l in (master_list.txt) do (
    set "line=%%l"
    :: 识别名片块开始,重置存储变量
    if "!line!"=="BEGIN:VCARD" (
        set "invcard=1"
        for /l %%i in (1,1,!field_cnt!) do set "v_%%i="
    )
    :: 识别名片块结束,将当前名片所有字段拼成一行写入CSV
    if "!line!"=="END:VCARD" (
        set "invcard=0"
        set "row="
        for /l %%i in (1,1,!field_cnt!) do (
            set "row=!row!"!v_%%i!","
        )
        :: 去掉末尾多余逗号写入行
        echo !row:~0,-1! >> contacts.csv
    )
    :: 名片块内匹配对应字段存值
    if !invcard! equ 1 (
        for /l %%i in (1,1,!field_cnt!) do (
            echo !line! | findstr /C:"!f_%%i!" >nul && (
                set "val=!line!"
                set "val=!val:*: =!"
                :: 转义值内自带的引号、逗号,避免CSV格式错乱
                set "v_%%i=!val:"=""!"
            )
        )
    )
)

:: 清理临时文件
del master_list.txt
echo 处理完成,结果已保存为contacts.csv,可直接用Excel打开
pause
goto :eof

:add_col
set /a field_cnt+=1
set "f_!field_cnt!=%~1"
set "header=!header!"%~2","
goto :eof

使用说明

  • 输出文件为contacts.csv,已经对值内自带逗号、引号的特殊情况做了转义,Excel打开不会出现列错位
  • 需要增减提取字段时,只需要在代码call :add_col的位置按示例格式加行即可,第一个参数填VCF文件里的字段前缀,第二个参数填你想要的表格列头名
  • 脚本自动按BEGIN:VCARD/END:VCARD拆分单张名片,不会出现不同人的信息错配问题

内容的提问来源于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 02:12:06