如何创建批处理文件以从csv文件

时间:2017-09-04 14:37:00

标签: batch-file

如何创建批处理文件以从csv文件中删除特定列的双引号

输入csv文件:

"DocumentType","Company","Division","SeasonYear","Style"
"832","XYZ","S17","2017","S"
"832","XYZ","S17","2017","M"

我想删除第1列中的双引号,其中值将是标题(第一个记录)中的DocumentType和剩余记录中的832。

预期结果应为:

DocumentType,"Company","Division","SeasonYear","Style"
832,"XYZ","S17","2017","S"
832,"XYZ","S17","2017","M"

我尝试使用下面的批处理脚本,但它替换了文件中的所有双引号。

@echo off
setlocal EnableDelayedExpansion

set FileIn=out.csv
set FileOut=in2.csv

(
    for /F "usebackq tokens=*" %%A in ("%FileIn%") do (
    set Line=%%A
    set Line=!Line:"=!
    for /L %%B in (1,1,20) do (
        set Line=!Line: ,=,!
        set Line=!Line:, =,!
    )
    echo.!Line!
    )
 ) > "%FileOut%"

请告知。

3 个答案:

答案 0 :(得分:2)

单行批处理文件解决方案:

@(For /F Tokens^=1*Delims^=^" %%A In (input.csv) Do @Echo %%A%%B)>output.csv

根据需要更改输入和输出.csv文件名。

答案 1 :(得分:0)

@ECHO Off
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q46039339.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqtokens=1*delims=," %%a IN ("%filename1%") DO ECHO %%~a,%%b
)>"%outfile%"

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

我使用了一个名为q46039339.txt的文件,其中包含我的测试数据。

生成定义为%outfile%

的文件

读取输入文件的每一行,将第一个,之前的部分分配给%%a,将剩余部分分配给%%b

使用~运算符删除%%a中的引号,添加回commad并重新调整该行的其余部分。

围绕for语句的括号允许将echo es重定向到定义的新文件。

答案 2 :(得分:0)

这是批量代码,完全符合我的要求。首先读取所有csv文件并替换“DocumentType”= DocumentType和“832”= 832

@echo off
setlocal EnableDelayedExpansion

copy 832*.csv 832_tmp.csv
set FileIn=832_tmp.csv
set FileOut=832.csv

(
  for /F "usebackq tokens=*" %%A in ("%FileIn%") do (
  set Line=%%A
                    REM replace "DocumentType" to DocumentType and "832" to 832
  set Line=!Line:"DocumentType"=DocumentType!
  set Line=!Line:"832"=832!

  echo.!Line!
)  > 832.csv            REM wtite output file 
)
del 832_tmp.csv         REM delete temporary created file