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

Batch file 如何创建批处理文件以从csv文件的特定列中删除双引号,batch-file,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","S

如何创建批处理文件以从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%"
请告知。

@ECHO Off
SETLOCAL
设置“sourcedir=U:\sourcedir”
设置“destdir=U:\destdir”
设置“filename1=%sourcedir%\q46039339.txt”
设置“outfile=%destdir%\outfile.txt”
(
对于/f“usebackqtokens=1*delims=,”(“%filename1%”)中的%%a,执行ECHO%%~a、%%b
)>“%outfile%”
后藤:EOF
您需要更改
sourcedir
destdir
的设置以适应您的环境

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

生成定义为%outfile%的文件

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

使用
~
运算符从
%%a
中删除引号,添加回逗号,并将行的其余部分反写


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

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

@(对于/F令牌^=1*Delims^=^“%%A在(input.csv)Do@Echo%%A%%B)>output.csv

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

这是非常适合我要求的批处理代码。首先读取所有csv文件,并替换为“DocumentType”=DocumentType和“832”=832


这是第一条记录的帮助。但我想对输入文件中的所有行重复这一点,因为您现在有可用的解决方案,我建议您决定您喜欢哪一个解决方案,并将其标记为您接受的答案。更简单:
(for/F“tokens=1*delims=,%a in(input.csv)do@echo%~a,%b)>output.csv
(从命令行中)@Aacini,这是Magoo已经使用过的,因此我选择了另一种方法,尽管我不知道它有多么简单,唯一的区别是分隔符的选择。你是对的!我没有仔细检查Magoo的答案…
:(
此方法更简单,因为它不需要转义可能使许多批处理文件用户感到困惑的特殊字符。
@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