通过Windows批处理文件读取CSV文件并创建TXT文件

3
我有一个Excel文件,每行有5个值。现在,我想通过批处理文件读取.csv文件,并创建文本文件以包含文件中的内容。
例如,如果我的CSV文件中有苹果和芒果(在一列中),那么批处理文件应该读取这个.csv文件,并创建一个文本文件,像这样“苹果是水果”,并在下一行写上“芒果是水果”。请问是否有人可以分享代码呢?

在不改变原意的情况下,您只需翻译文本内容即可。 - Magoo
你好,我已经尝试了你提供的代码,但是它记录的不是数据,而是文件的路径。代码如下:'FOR %%A IN ('C:\temp\fruit.csv') DO ( echo %%A is a fruit >>test.txt ) ' 输出结果为:Mango is a fruit。 - user1620464
为什么首先要使用批处理?在PowerShell中,这非常简单,因为Import-Csv是内置的。 - Bill_Stewart
2个回答

12

在SOF中有很多类似的问题已经得到了解答。其中一些可供参考的问题链接如下:

从csv文件中读取并提取某些数据列,基于第一列的值

帮助编写一个批处理脚本来解析CSV文件并输出文本文件

如何在Windows批处理文件中进行循环?

最简单的答案是使用以下代码循环遍历文件:

FOR %A IN (list) DO command [ parameters ]

示例:

样本 CSV 文件:

0,1,2,4
1,1,2,3
2,2,4,6
3,3,6,9

批处理文件内容:

for /f "usebackq tokens=1-4 delims=," %%a in ("sample1.csv") do (
      echo %%a %%b %%c %%d )

在这里,tokens=1-4 表示我们希望读取每行的 4 列数据。


嗨Girish,感谢您的快速回复。我已经尝试了您提供的代码,但是它记录的不是数据,而是文件的路径。 'FOR %%A IN ('C:\temp\fruit.csv') DO ( echo %%A >>test.txt ) ' - user1620464
1
如果CSV包含1,2,“苹果,香蕉”,4怎么办?它应该在索引3处打印字符串“苹果,香蕉”,但似乎忽略了引号。 - bryc

1
我原本打算使用PowerShell中的FOR命令来转换文件,但是使用命令行直接使用参数解析文件会更加容易和简单。请注意保留HTML标签。
@echo off rem     findstr "@SPC@" sample3.csv&& echo ERROR: source has our space encoding& goto :EOF
 for /F "tokens=*" %%a in (sample3.csv) do (
   set x_line=%%a
   set x_line=!x_line: =@SPC@!
   set x_line=!x_line:^&=@AND@!
   set x_line=!x_line:^|=@POR@!
   call :parcsv %%a& rem dangerous unless you parsed properly
 )
 goto :EOF

:parcsv
 set x_cola=%~1
 set x_colb=%~2
 set x_colc=%~3
 set x_cold=%~4
 for %%v in ( x_cola x_colb x_colc x_cold 
 ) do set %%v=!%%v:@POR@=^|!& set %%v=!%%v:@AND@=^&! set %%v=!%%v:@SPC@= !
 echo "!x_cola!"  "!x_colb!" "!x_colc!"   "!x_cold!"
 goto :EOF

这将正确处理一行为1,2,"苹果,香蕉",4的文件。 或者用于将逗号分隔文件转换为制表符分隔等。

但是经过第二次思考,它现在会中断:1,2,"橙色香蕉",5点半,6

所以我需要更新原始的FOR /F行:for /F "tokens=* delims=," %%a in (sample.csv) do call :parcsv %%a,使其使用替代字符或代码而不是空格。

再次审查后,如果在一行中有"&",它实际上非常糟糕,因为您可能会打破批处理文件并被黑客攻击...因此我们需要对"&"和"|"进行编码,以及可能还有更多!!! 因此,让我们更新这些内容...

因此,也许PowerShell混合一行脚本并不那么糟糕:

for /F "tokens=1-4 delims=  " %%a in ('powershell "import-csv sample.csv|convertto-csv -d `t"') do echo a:[%%a] b:[%%b] c:[%%c] d:[%%d]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接