从CSV文件中删除所选字段

时间:2016-02-24 03:59:41

标签: csv batch-file for-loop batch-processing export-to-csv

我有包含79个字段的CSV文件。但我只需要14个领域。所以我需要生成一个包含这14个字段的CSV文件。这是日常流程,需要安排。 我使用以下命令创建了一个批处理文件。

FOR /f "tokens=1,7,17,18,28,29,31,34,39,61,62,66,71,73 delims=," %%B in (C:\Users\c6372\Desktop\xmltocsv\Fulldata_withheaders.csv) do @echo %%B,%%C,%%D,%%E,%%F,%%G,%%H,%%I,%%J,%%K,%%L,%%M,%%N,%%O>> C:\Users\c6372\Desktop\xmltocsv\Requireddata_withheaders.csv

但问题是,批处理文件中的FOR循环只能工作到31个字段。但我有79个领域。我知道如果我们想要处理超过31个字段,我们应该使用嵌套for循环。我尝试过这个。但它没有用。任何人都可以帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:3)

@echo off


set "name=npocmaka"
echo before firstToUpper - %name%

call ::firstToUpper name

echo after firstToUpper - %name%
exit /b 0


:firstToUpper var
setlocal enableDelayedExpansion
set "name=!%~1!"

set first_letter=%name:~0,1%
set last_letters=%name:~1%

for %%# in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
    set first_letter=!first_letter:%%#=%%#!
)

set "name=%first_letter%%last_letters%"

endlocal && (
    set "%~1=%name%"
)
exit /b %errorlevel%

您需要更改@ECHO OFF SETLOCAL SET "sourcedir=U:\sourcedir" SET "destdir=U:\destdir" SET "filename1=%sourcedir%\q35592993.txt" SET "filename2=%destdir%\q35592993out.txt" FOR /f "usebackq tokens=1,7,17,18,28,29,* delims=," %%B in ("%filename1%") do ( for /f "tokens=2,5,10,29,* delims=," %%I in ("%%H") do ( for /f "tokens=3,4,8,13,15 delims=," %%N in ("%%M") do ( echo %%B,%%C,%%D,%%E,%%F,%%G,%%I,%%J,%%K,%%N,%%O,%%P,%%Q,%%R>> "%filename2%" ) ) ) GOTO :EOF destdir sourcedir, filename1 , filename2`的设置以适合您的具体情况。我使用了适合我系统的名字。

我使用了一个名为and的文件,其中包含一些虚拟数据供我测试。

诀窍是使用令牌q35592993.txt,这意味着'在最后一个明确提到的令牌之后的其余部分。