我试图让这个脚本自动将文本文件转换为CSV,但它由管道符“|”分隔 . 我下面的内容是在我的批处理文件中,它用逗号替换管道,我唯一的问题是,在第7列中,字符串包含逗号,所以当我在Excel中打开CSV文件时,它将这些逗号视为列并混淆列的格式 . 有没有办法只将文本限定符添加到第7列?文本限定符是字符串周围的引号 .
例
值1 |值2,AndSome |值3
有脚本将文本文件转换为:
值1, “值2,AndSome”,值3
@echo off
setLocal enableDELAYedexpansion
for /f "tokens=* delims=^|" %%a in (myFile.txt) do (
set str=%%a
echo !str:^|=,! >> myFile.csv
)
2 回答
这应该可以解决您的问题 .
JREPL.BAT是一个功能强大的正则表达式查找/替换实用程序,可以轻松有效地解决此问题 . 它是纯脚本(混合JScript /批处理),可以在XP之后的任何Windows机器上本机运行 .
我可以写一个总是引用第7列的解决方案,但这个用途有限 . 更强大的解决方案是选择性地引用包含逗号的任何列,而不管位置如何 . 任何没有逗号的列都将保持不加引号 .
唯一可能让你失望的事情是,如果任何列已经包含引号 . CSV "standard"要求将任何引用文字转义为
""
,并且该列也用引号括起来 . 以下内容将正确地转义引号文字,并且还包含引号内包含逗号或引号的任何列 .可以添加的最后一件事是将命令放在批处理脚本中,并参数化分隔符,源文件和目标文件 . 我还在脚本中添加了一个帮助工具 .
delim2csv.bat
因此,使用上面的脚本,解决方案将变为:
EDIT 2017-02-19
在https://stackoverflow.com/a/42324094/1012053我开发了一个名为parseCSV.bat的小型混合脚本,专门用于转换CSV数据,并且不使用正则表达式 . 它比依赖JREPL.BAT的上述解决方案快11倍 . 正则表达式功能强大,方便且简洁,但手工构造的代码通常更快 .
使用parseCSV.bat,解决方案就变成了
输出中唯一的区别是parseCSV引用每个列值,但delim2csv仅引用包含逗号或引号的列值 .