【问题标题】:Text file Side by Side Merge not working via Bat file文本文件并排合并无法通过 Bat 文件工作
【发布时间】:2015-03-12 04:38:17
【问题描述】:

为了并排合并两个 csv 文件,我使用了以下代码:

@echo off
setlocal EnableDelayedExpansion

< ..\Data\2.csv (
   for /F "delims=" %%a in (..\Data\1.csv) do (
      set /P line2=
      echo %%a,!line2!
   )
) > ..\Data\input.csv

它在两个小的 csv 文件上运行良好,例如:

File 1
------
a     
b     
File 2
------
apple 
ball 

但是当我尝试合并这两个 csv 文件时, 文件 1:

source,hcid,fname,lname,dob,gender,relTpCd,Rel
WGS20,902A07430,Subs,Performancel,1965-07-01,F,SCRBR,Subscriber
WGS20,686T08408,Abdullah,Wilson,1965-01-01,F,SCRBR,Subscriber
WGS20,265A06410,Aewae,Asfwafc,1974-11-18,M,SCRBR,Subscriber

文件 2:

SLangCd,SLang,SLangDesc,WLangC
100,SPOKEN LANGUAGE,English,100449,WRITTEN LANGUAGE,Undetermined
100,SPOKEN LANGUAGE,English,100449,WRITTEN LANGUAGE,Undetermined
100449,SPOKEN LANGUAGE,Undetermined,100449,WRITTEN LANGUAGE,Undetermined

我得到一个像这样的合并文件(文件 2 的行单独打印:

source,hcid,fname,lname,dob,gender,relTpCd,Rel,SLangCd,SLang,SLangDesc,WLangC
WGS20,902A07430,Subs,Performancel,1965-07-01,F,SCRBR,Subscriber,100,SPOKEN     LANGUAGE,English,100449,WRITTEN LANGUAGE,Undetermined
100,SPOKEN LANGUAGE,English,100449,WRITTEN LANGUAGE,Undetermined
100449,SPOKEN LANGUAGE,Undetermined,100449,WRITTEN LANGUAGE,Undetermined
WGS20,686T08408,Abdullah,Wilson,1965-01-01,F,SCRBR,Subscriber,100,SPOKEN     LANGUAGE,English,100449,WRITTEN LANGUAGE,Undetermined
100,SPOKEN LANGUAGE,English,100449,WRITTEN LANGUAGE,Undetermined
100449,SPOKEN LANGUAGE,Undetermined,100449,WRITTEN LANGUAGE,Undetermined
WGS20,265A06410,Aewae,Asfwafc,1974-11-18,M,SCRBR,Subscriber,100,SPOKEN LANGUAGE,English,100449,WRITTEN LANGUAGE,Undetermined
100,SPOKEN LANGUAGE,English,100449,WRITTEN LANGUAGE,Undetermined
100449,SPOKEN LANGUAGE,Undetermined,100449,WRITTEN LANGUAGE,Undetermined

【问题讨论】:

  • 执行后:echo !line2!它表明!line2!正在存储第二个文件的全部内容,而不仅仅是第二个文件中的一行!

标签: csv batch-file merge


【解决方案1】:

您的文件有一个 LF(换行符,0x0A 字符)作为行终止符,而不是 Windows 中的标准行终止符 CRLF(回车,'0x0D 0x0A' 字符)。

虽然for /f 命令能够处理它,但重定向的set /p 将检索直到第一个 CR 或 1021 个字符的所有内容,首先发生什么。

您将需要(至少)使用类似的东西处理2.csv 文件

type 2.csv | find /v "" > 2.csv.tmp

这将生成一个带有正确行终止符的临时文件。这是您应该用作重定向输入的文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    相关资源
    最近更新 更多