如何用Windows批处理从引号逗号分隔文件填充数组并转竖线分隔格式
Windows批处理脚本实现带引号CSV转竖线分隔TXT
核心思路
利用批处理的字符串替换与循环提取引号内的字段,通过延迟变量扩展维护字段数组,最终按指定顺序拼接成竖线分隔格式输出。
完整脚本示例
假设输入文件为input.csv,输出文件为output.txt,需按第3、1、2字段的顺序输出:
@echo off setlocal enabledelayedexpansion :: 初始化输出文件 echo. > output.txt :: 逐行读取输入文件 for /f "delims=" %%a in (input.csv) do ( set "line=%%a" set "field_count=0" set "temp=!line!" :: 循环提取引号内的所有字段 :extract_field if not "!temp!"=="" ( :: 移除第一个引号及之前的内容 set "temp=!temp:*"=!" if "!temp!" neq "" ( set /a field_count+=1 :: 截取当前引号内的内容作为字段 for /f "delims="" tokens=1" %%b in ("!temp!") do set "field[!field_count!]=%%b" :: 移除已处理的字段部分 set "temp=!temp:*"=!" goto extract_field ) ) :: 按计费系统要求的顺序拼接字段(可自行调整field[N]的顺序) set "output_line=!field[3]!|!field[1]!|!field[2]!" :: 写入输出文件 echo !output_line! >> output.txt ) endlocal echo 转换完成,输出文件为output.txt
关键说明
setlocal enabledelayedexpansion:启用延迟变量扩展,保证循环内变量的实时更新生效。:extract_field循环:反复截取引号间的内容,直到处理完整行所有字段。!temp:*"=!":通过字符串替换定位到第一个字段的起始位置,移除前面的冗余内容。for /f "delims="" tokens=1":以引号为分隔符,精准提取单个引号内的字段内容。
注意事项
- 若输入文件包含表头,可在
for /f后添加skip=1参数跳过:for /f "skip=1 delims=" %%a in (input.csv)。 - 确保输入文件每行的字段数量一致,避免出现字段缺失或错位。
内容的提问来源于stack exchange,提问作者Bluejay74
相关产品推荐
相关产品推荐

