太长不看版:windows批处理的for,可以使用tokens和delims来读出指定列的内容,但是,当分隔符紧紧相连的时候,token会按顺序取下一个不是分隔符的字符作为内容,而不是取null。
详情:
准备一个测试文件,叫test.txt如下:
1,2,3,4,5
1,,2,3,4,5
1,,,2,3,4,5
1,,, ,2,3,4,5
1,,,,a,2,3,4,5
打开cmd,输入如下内容:
for /f "tokens=2 delims=," %i in ('type test.txt') do (echo %i)
得到的结果是:
可以注意到,命令的分隔符是“,”,取的是第二列
第一行结果是2,无可厚非
第二行结果也是2,喵喵喵?难道不是null么?
第三行也是2,显然连续的多个逗号都被作为同一个分隔符处理了
第四行取到的其实是空格,所以显示了echo的状态
第五行取到a,很合理……
结论,连续的分隔符会作为同一个分隔符被处理,直到取到下一个不是分隔符的字符,而不是我们以为的取到null。 那么用for从csv中处理结果会变得贼麻烦……批处理真难用……
吐槽:csdn的啥破编辑器……真难用……现在是2018年了,竟然还有这么难用的编辑器……csdn药丸。