如何在 .csv 文件中批量创建的新列上包含带有变量的新字符串?

问题描述 投票:0回答:1

我有一个.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 必须与新结果一起保存。

batch-file cmd
1个回答
0
投票

可以使用以下批处理文件代码来完成此任务:

@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 文档
    使用命令重定向运算符
  • 使用 Windows 批处理文件的单行多个命令
© www.soinside.com 2019 - 2024. All rights reserved.