我有2个包含以下数据的CSV文件。我想使用.cmd批处理文件在新的CSV文件中添加第3和第4列。是否可以使用.cmd批处理文件。如果是,请帮我提供代码。
File1.csv
SL,Name,Score,Result
1,Saquib,10,100
2,Tanzil,10,100
3,Hasib,10,100
4,Sharek,10,100
和
File2.csv
SL,Name,Score,Result
1,Saquib,20,200
2,Tanzil,30,300
3,Hasib,40,400
4,Sharek,50,500
输出应如下所示。 Combine.csv
SL,Name,Score,Result
1,Saquib,30,300
2,Tanzil,40,400
3,Hasib,50,500
4,Sharek,60,600
我有一个代码,它结合了2个文件但不添加字段。
@echo off
ECHO Set working directory
pushd %~dp0`enter code here`
ECHO Deleting existing combined file
del combined.csv
setlocal ENABLEDELAYEDEXPANSION
set cnt=1
for %%i in (*.csv) do (
if !cnt!==1 (
for /f "delims=" %%j in ('type "%%i"') do echo %%j >> combined.csv
) else if %%i NEQ combined.csv (
for /f "skip=1 delims=" %%j in ('type "%%i"') do echo %%j >> combined.csv
)
set /a cnt+=1
答案 0 :(得分:0)
batch不是此类操作的脚本语言,使用PowerShell这样的语言会更快更容易。
示例假设两个文件的前两列是相同的
$table1 = import-csv file1.csv
$table2 = import-csv file2.csv
# convert Score Result columns to type int
$table1 |% { $_.Score = [int]$_.Score; $_.Result = [int]$_.Result }
$table2 |% { $_.Score = [int]$_.Score; $_.Result = [int]$_.Result }
# add score and result for each row respectively
for ($i=0;$i -lt $table1.count;$i++) {
$table1[$i].Score += $table2[$i].Score
$table1[$i].Result += $table2[$i].Result
}
# export
$table1 | export-csv output.txt
或者,例如,如果第一列不相同则使用哈希表
$table1=import-csv file1.csv
$htable=@{}
foreach($r in $table1) {
$r.Score = [int]$r.Score;
$r.Result = [int]$r.Result;
$htable[$r.SL] = $r;
}
$table2=import-csv file2.csv
foreach($r in $table2) {
$r.Score = [int]$r.Score + $htable[$r.SL].Score;
$r.Result = [int]$r.Result + $htable[$r.SL].Result;
$htable[$r.SL] = $r;
}
$htable.Values | export-csv output.txt