文本文件并排合并无法通过 Bat 文件工作
Text file Side by Side Merge not working via Bat file
要并排合并两个 csv 文件,我使用了以下代码:
@echo off
setlocal EnableDelayedExpansion
< ..\Data.csv (
for /F "delims=" %%a in (..\Data.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
您的文件有一个 LF(换行符,0x0A
字符)作为行终止符,而不是 [=23 中的 CRLF(回车符 return,'0x0D 0x0A` 字符)标准行终止符=].
虽然 for /f
命令能够处理它,但重定向的 set /p
将检索所有内容,直到第一个 CR 或 1021 个字符,先发生什么。
您将需要(至少)处理 2.csv
文件,例如
type 2.csv | find /v "" > 2.csv.tmp
这将生成一个具有正确行终止符的临时文件。这是您应该用作重定向输入的文件。
要并排合并两个 csv 文件,我使用了以下代码:
@echo off
setlocal EnableDelayedExpansion
< ..\Data.csv (
for /F "delims=" %%a in (..\Data.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
您的文件有一个 LF(换行符,0x0A
字符)作为行终止符,而不是 [=23 中的 CRLF(回车符 return,'0x0D 0x0A` 字符)标准行终止符=].
虽然 for /f
命令能够处理它,但重定向的 set /p
将检索所有内容,直到第一个 CR 或 1021 个字符,先发生什么。
您将需要(至少)处理 2.csv
文件,例如
type 2.csv | find /v "" > 2.csv.tmp
这将生成一个具有正确行终止符的临时文件。这是您应该用作重定向输入的文件。