如何通过.bat批处理正确转换含制表符空格的.tsv文件为.csv文件
批处理TSV转CSV(兼容字段含空格场景)解决方案
故障原因
原有脚本转换失败的核心问题:
- 内层
for %%b in (%%a)循环默认将空格、制表符同时识别为分隔符拆分文本,违背TSV仅以制表符作为列分隔的规则,导致字段内带空格的内容被错误拆分 - 缺少字段内空格移除逻辑,无法匹配输出要求
修正后脚本
直接替换原有代码即可,脚本兼容带空格的路径,逻辑为:合并指定目录下所有TSV文件→逐行读取内容仅按制表符拆分列→移除所有字段内的空格→用逗号拼接列写入CSV:
@echo off setlocal disableDelayedExpansion set "OUT_DIR1=%~1" set "input=%OUT_DIR1%\%~2" set "output=%OUT_DIR1%\%~3" set "IN_DIR=%~4" :: 合并指定目录下所有tsv文件 type "%IN_DIR%\*.tsv" > "%OUT_DIR1%\result.tsv" > "%output%" ( for /f "usebackq delims=" %%a in ("%input%") do ( set "line=%%a" setlocal enableDelayedExpansion :: 将所有制表符替换为逗号(注意=后为制表符,不要替换为空格) set "line=!line: =,!" :: 移除内容中所有空格 set "line=!line: =!" echo !line! endlocal ) ) endlocal
重要提示:代码中
!line: =,!一行里,等号后的空白字符是制表符(Tab键输入),如果替换成空格会导致列分隔识别错误。
调用方法
传参逻辑和原脚本完全一致,按顺序传入4个参数即可:
脚本文件名.bat 输出目录路径 合并后TSV文件名 目标CSV文件名 待处理TSV所在目录路径
转换效果
使用你提供的测试样本运行后,输出结果完全符合预期:
0001,abc,demo1,abc 0001,abc,demo2,abc 0001,abc,demo3,abc 0001,abc,demo4,abc
内容的提问来源于stack exchange,提问作者Nguyễn Lê Nhật Quang
相关产品推荐
相关产品推荐

