【问题标题】:Batch File to Duplicate column in CSV file批处理文件复制 CSV 文件中的列
【发布时间】: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 列相同。

标签: csv batch-file cmd


【解决方案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,现在排序!
猜你喜欢
  • 1970-01-01
  • 2021-07-16
  • 2014-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多