将每行文本更改为csv文件的每一列

时间:2017-09-26 09:57:28

标签: windows batch-file

我有一个文本文件。例如

 This is computer
 That one is monitor
 Some products are printer

我想将每行数据保存到csv文件的每一列中作为一行。

expected result

所以,我尝试创建这样的批处理文件。

@ECHO OFF
setlocal ENABLEDELAYEDEXPANSION
set file=a.txt
set content=
echo %file%
for /F  %%i in (a.txt) Do (
        set content=!content!,%%i
    )
echo %content%>>result.csv
pause

但我只从每一行文字中得到第一个字。

result

当我尝试将tokens=*添加到for循环时,

for /F "tokens=*"  %%i in (a.txt) Do....

我收到错误:The system cannot find the file specified.

我不明白我的代码有什么问题,而且我不熟悉批处理脚本。

2 个答案:

答案 0 :(得分:1)

您需要确保行内容和文件名中的保护空间:

@Echo Off
SetLocal EnableDelayedExpansion
Set "fIn=a.txt"
Set "fOut=result.csv"
Set "str="
For /F "UseBackQ Delims=" %%A In ("%fIn%") Do Set "str=!str!,%%A"
If Defined str >>"%fOut%" Echo(%str:~1%

修改

稍微替代一些可能存在于未提供的文件内容中的潜在问题字符:

@Echo Off
SetLocal DisableDelayedExpansion
Set "fIn=a.txt"
Set "fOut=result.csv"
Set "str="
SetLocal EnableDelayedExpansion
For /F "UseBackQ Delims=" %%A In ("%fIn%") Do Set "str=!str!,%%A"
EndLocal & Set/P "=%str:~1%"<Nul>>"%fOut%"

答案 1 :(得分:0)

您的代码中存在多个错误。我已修复它们,所以现在正在生成一个正确的csv字符串。但是,较新的Excel版本实际上使用; 而不是来分隔单元格。这是你的代码:

@ECHO OFF
setlocal ENABLEDELAYEDEXPANSION
set file=a.txt
for /F %%i in (%file%) Do (
        set content=!content!;%%i
    )
set content=!content:~1!
echo %content%>>result.csv
pause