从 CSV 批处理文件中删除列
Posted
技术标签:
【中文标题】从 CSV 批处理文件中删除列【英文标题】:Remove columns from CSV Batch file 【发布时间】:2021-07-16 22:22:22 【问题描述】:我正在尝试删除 csv 文件中除第 2、3、5 和 11 列之外的所有列
第 11 列有问题。
这是我的批处理文件:
@Echo off
(for /f "delims=" %%A in (test.csv) do Call :Split %%A
) > test_New.csv
goto :Eof
:Split
Echo(%2,%3,%5,%11
它与返回第 1 列的第 11 列不同。
我已经尝试了 %11%,但也没有用。
谢谢
【问题讨论】:
批处理不支持大于 9 的数字(位置)参数(%0 到 %9)。 您可能会发现SS64 onFOR
很有用。
在:Split
中按顺序执行shift /6
将第11 个参数移到第9 个位置,这样您就可以使用%9
访问它...
为什么不使用FOR /F
命令的功能来拆分行? "tokens=2,3,5,11 delims=,"
.
【参考方案1】:
正如其他人已经说过的,Batch 不支持大于 9 的位置参数。虽然有一些解决方法(想到 shift /n
),但处理此类情况的更好方法是使用 @987654323 for /f
的 @ 选项:
@echo off
(
for /f "tokens=2,3,5,11 delims=," %%i in (test.csv) do echo:%%i,%%j,%%k,%%l
) >"test_New.csv"
每个令牌都会分配一个额外的变量名,因此第一个令牌 (#2) 变为 %%i
,第二个 (#3) 变为 %%j
,依此类推。详情请见for /?
。
【讨论】:
太好了,谢谢!我现在正在尝试添加更多并重新排序列。我已经输入了tokens=2,3,5,11,6
,但它在新的 csv 中打印为 2、3、5、6、11。有什么想法吗?
是的@RowleyCory-Wright,使用 [powershell],它内置了对 csv 文件的支持!
@RowleyCory-Wright 令牌编号会自动排序,因此在您的情况下,tokens=2,3,5,6,11
需要像这样使用:echo:%%i,%%j,%%k,%%m,%%l
(请注意我如何切换 m
和 l
)。
@RowleyCory-Wright 如果您对此答案感到满意,我可以请您将其标记为已接受吗?以上是关于从 CSV 批处理文件中删除列的主要内容,如果未能解决你的问题,请参考以下文章