从 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 on FOR 很有用。 :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(请注意我如何切换 ml)。 @RowleyCory-Wright 如果您对此答案感到满意,我可以请您将其标记为已接受吗?

以上是关于从 CSV 批处理文件中删除列的主要内容,如果未能解决你的问题,请参考以下文章

使用批处理文件删除列 .CSV 中的单词

批处理文件:从 .csv 文件中读取浮点值

Python 使用pandas库处理csv文件

cmd去除csv首行

如何用批处理命令把1个文件夹里多个csv文件的某一列合并成一个txt

从 .CSV 文件的数值中删除双引号和逗号