batch file删除csv中的列

我写了这段代码,所以我可以从csv文件中删除一列。

@echo off setlocal enableextensions enabledelayedexpansion type nul > tmp.txt SET /A COUNT=0 for /F "tokens=*" %%A in (d.csv) do ( set LINE="%%A" set /A COUNT+=1 for /F "tokens=1,2,3,4,5,6,7,8,* delims=," %%a in (!LINE!) do ( set row[0]=%%a set row[1]=%%b set row[2]=%%c set row[3]=%%d set row[4]=%%e set row[5]=%%f set row[6]=%%g set row[7]=%%h ) echo !row[0]!,!row[2]!,!row[3]!,!row[4]!,!row[5]!,!row[6]! >>tmp.txt echo. ) endlocal Test file: A1,B1,C1,D1,la la,,1 A2,B2,C2,D2, ,fef 3, A3,B3,C3,D3,be be ,bo,bo 1 A4,B4,C4,D4,tu tu,tu 7,881 Output file: A1,C1,D1,la la,1, A2,C2,D2, ,fef 3, A3,C3,D3,be be ,bo,bo 1 A4,C4,D4,tu tu,tu 7,881 

我不明白为什么在第一行的输出文件中被删除,并在最后添加。 另外我想知道是否有更好的方法来做到这一点。 谢谢!

 @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION ( FOR /f "delims=" %%a IN (q29441490.txt) DO ( SET "line=%%a" SET "line=!line:,= , !" FOR /f "tokens=1,2*delims=," %%p IN ("!line!") DO ( SET "line=%%p,%%r" SET "line=!line: , =,!" ECHO(!line! ) ) )>u:\newfile.txt GOTO :EOF 

我使用了一个名为q29441490.txt的文件, q29441490.txt包含您的数据以供testing。

产生u:\ newfile.txt

标记之间的分隔符是分隔符序列 ,因此,,将其看作一个分隔符,因此这些字段显示为移动一个位置。

抓住每一行,用tokenise代替(你没有明确地说,但你似乎想要消除第二列),所以%%q获得第一列, %%r行后面的第二行。 连接这些,插入逗号,然后反转replace。

如果你想消除另一列,那么应该指定不同的tokens元素,并且需要调整行的重构。