批处理脚本优化:过滤冗余数据仅保留编号与文件名
优化后的BAT脚本:精准提取编号与文件名对应关系
你原来的脚本会带出空白项、姓名这类冗余内容,核心原因是没有精准定位到我们需要的编号段和文件列表段。下面是调整后的脚本,直接输出你要求的编号,文件名格式:
@echo off setlocal EnableDelayedExpansion > "Output.csv" ( for /F "usebackq delims=;" %%L in ("transact.txt") do ( :: 拆分每一条独立记录(分号分隔) for /F "tokens=1,2 delims=:" %%A in ("%%L") do ( :: 只取编号部分:从冒号后内容里提取第一个逗号前的字符串 for /F "tokens=1 delims=," %%N in ("%%B") do ( :: 处理冒号后的文件列表,按逗号拆分每个文件名 set "FILELIST=%%C" for %%F in ("!FILELIST:,=" "!") do ( :: 输出指定格式的内容 echo %%~N,%%~F ) ) ) ) ) endlocal
关键优化说明
- 分层拆分数据:先按分号
;把整条大文本拆成独立记录,避免跨记录处理的混乱 - 精准抓编号:用
tokens=1 delims=,从85123, ,Smith...这类内容里,只提取第一个逗号前的编号(比如85123),直接跳过后面的姓名、空白项 - 干净处理文件列表:直接定位到冒号后的文件列表部分,按逗号拆分后逐个输出,完全不碰冗余内容
- 严格匹配输出格式:直接输出
%%~N,%%~F,完全符合你要的编号,文件名样式
测试效果
用你给出的示例输入:
85:85123, ,Smith,181215:image.tif,image2.tif,image3.tif;85:85456, ,Richard,184985:image4.tif,image5.tif;85:85789, ,Aly,589456:image.tif
运行脚本后,Output.csv里的内容会是:
85123,image.tif 85123,image2.tif 85123,image3.tif 85456,image4.tif 85456,image5.tif 85789,image.tif
这样就彻底去掉了所有冗余内容,只保留你需要的编号和文件名对应关系啦。
内容的提问来源于stack exchange,提问作者sfdc developer
相关产品推荐
相关产品推荐

