批处理文件复制 CSV 文件中的列
Posted
技术标签:
【中文标题】批处理文件复制 CSV 文件中的列【英文标题】:Batch File to Duplicate column in CSV file 【发布时间】:2020-11-27 21:55:14 【问题描述】:我需要能够在 CSV 文件中提取一列并将其复制,以便每个文件的开头和结尾都具有相同的确切值。
请参阅下面显示输入和所需输出的示例。
输入
abc,123,tim,cook
xyz,456,steve,jobs
期望的输出
abc,123,tim,cook,123
xyz,456,steve,jobs,456
理想情况下,我想使用批处理脚本来完成这项工作
有什么想法吗?
【问题讨论】:
FOR /F
将是完美的
那么您想将第二个 CSV 列附加到条目的末尾吗?还是您想在每个条目之后附加它?
我不确定这两者之间的区别是什么意思,但我想将每行的第二个条目添加到同一行的末尾。
标题呢?我建议带有重复标头字段的 CSV 格式错误,或者可能会产生问题。
@Compo 对 header 语句是正确的,我添加了一个额外的脚本来附加一个新的标题列,如果它是相关的。例如,如果您的 csv 文件被使用标题作为标识符的 sql 查询读取,则会导致问题,因为如果您使用第一种方法,则有 2 列相同。
【参考方案1】:
示例文件test.csv
@echo off
(for /f "usebackq tokens=1,2,* delims=," %%i in ("test.csv") do (
echo %%i,%%j,%%k,%%j
)
)>new.csv
非常简单,我们获取字符串并分配给元变量%%i
,然后我们将字符串按,
拆分并仅使用标记2,然后我们回显元变量%%i
并用逗号附加%%a
.然后输出将在new.csv
PS!!正如@Compo 在评论中所述,具有重复的标头值可能会产生问题,具体取决于您对文件的处理方式,在这种情况下,您可以指定一个新的标头字段,该字段不重复,只需将该字段附加到标头,只需确保将值 New_HeaderValue
更改为实际的新标头值即可。:
@echo off
(for /f "usebackq delims=" %%i in ("test.csv") do echo %%i,New_HeaderValue & goto :remainder)>new.csv
:remainder
(for /f "usebackq skip=1 tokens=1,2,* delims=," %%i in ("test.csv") do (
echo %%i,%%j,%%k,%%j
)
)>>new.csv
【讨论】:
为什么有两个嵌套的for
循环? for /f "usebackq skip=1 tokens=1,2,* delims=," %%i in ("test.csv") do echo %%i,%%j,%%k,%%i
@Stephan 不应该是... echo %%i,%%j,%%k,%%j
?
@Stephan,假设我玩得很安全,我从手机发布,没有经过测试。当我再次使用笔记本电脑时,我会修改答案。谢谢
@elzooilogico:是的 - 错字。
@Stephan,现在排序!以上是关于批处理文件复制 CSV 文件中的列的主要内容,如果未能解决你的问题,请参考以下文章
批处理文件以循环通过远程 Git 分支并将每个分支中的类似 CSV 文件复制到本地目录