我有一个.csv,例如:
location,num1,num2,min,avg,med,max,std,
1344 and 640, 278.000000,8215.000000,0.000000,0.475325,0.465546;0.985196,0.168458,
我想在第一行包含字符串“ID”,在第二行包含 ID 为的变量:
ID,location,num1,num2,min,avg,med,max,std,
134085,1344 and 640, 278.000000,8215.000000,0.000000,0.475325,0.465546;0.985196,0.168458,
我不知道如何在第二行包含ID变量。此 .csv 必须与新结果一起保存。
可以使用以下批处理文件代码来完成此任务:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /F usebackq^ delims^=^ eol^= %%I in ("input.csv") do echo ID,%%I>"output.csv"& goto DataRows
:DataRows
(for /F usebackq^ skip^=1^ delims^=^ eol^= %%I in ("input.csv") do echo 134085,%%I)>>"output.csv"
rem if exist "output.csv" move /Y "output.csv" "input.csv"
endlocal
第一个
for /F
仅处理当前目录中名为 input.csv
的文件的第一行。使用的 for /F
选项定义了一个空的字符串分隔符列表,并且没有行结束符,以获取 CSV 文件中的整行,其中文件名用双引号引起来并分配给循环变量 I
,而不忽略任何非 -空行。该行以 ID,
开头输出,并将输出写入当前目录中名为 output.csv
的新文件中。
命令 GOTO 会在处理完文件
DataRows
中的第一行后跳转到标签 input.csv
下方的命令行进行进一步处理。
这次整个
for /F
命令行都用圆括号括起来,以首先打开已经存在的文件 output.csv
并让它始终打开,从 input.csv
跳过第一行和 134085,
使用命令 ECHO 插入到每个数据行输出的开头,并重定向到永久打开的文件 output.csv
直到处理完所有行。
最后一行被注释掉。如果创建的文件
rem
应替换当前目录中的文件 output.csv
,请删除命令 input.csv
。
指定
for /F
选项而不使用 "
中包含的参数字符串的语法很不寻常,但存在的唯一方法是使用 delims=
和 定义空字符串分隔符列表并且没有行尾字符eol=
,参数字符串末尾带有 eol=
。在这种情况下,有必要使用脱字符号 ^
转义每个等号和每个空格,因为选项未包含在 "
中,以便在处理时将每个空格和每个等号最初解释为文字字符。在命令 FOR之前使用命令行而不是参数字符串分隔符,使用不再包含任何
cmd.exe
的选项解释参数字符串。要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。
^
echo /?
endlocal /?
for /?
goto /?
if /?
move /?
rem /?
Microsoft 文档