我有一个文本文件。例如
This is computer
That one is monitor
Some products are printer
我想将每行数据保存到csv文件的每一列中作为一行。
所以,我尝试创建这样的批处理文件。
@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
但我只从每一行文字中得到第一个字。
当我尝试将tokens=*
添加到for循环时,
for /F "tokens=*" %%i in (a.txt) Do....
我收到错误:The system cannot find the file specified.
我不明白我的代码有什么问题,而且我不熟悉批处理脚本。
答案 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