我可以在excel中执行此操作,例如使用= CONCATENATE函数将多个列合并为一个列。但我想要做的是将同一文件夹中3个不同csv文件中的列合并为一个列。我想通过批处理脚本运行它,所以像VBScript那样的CMD复制命令似乎不起作用。
这是文件结构:
File1.csv
File2.csv
File3.csv
输出文件中的结果:
第1栏:www.domain.com/about.html
第2栏:www.nwdomain.com/contact.html
第3栏:www.stackdomain.com/index.html
第4栏:www.example-domain.com/faq.html
感谢您的帮助。
答案 0 :(得分:2)
@ECHO OFF
SETLOCAL
::
(
FOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r "." ^<csv1.csv') DO (
FOR /f "tokens=1*delims=:" %%c IN ('findstr /n /r "." ^<csv2.csv') DO (
IF %%a==%%c FOR /f "tokens=1*delims=:" %%e IN ('findstr /n /r "." ^<csv3.csv') DO (
IF %%a==%%e (
FOR /f "tokens=1-4delims=," %%m IN ("%%b") DO (
FOR /f "tokens=1-4delims=," %%r IN ("%%d") DO (
FOR /f "tokens=1-4delims=," %%w IN ("%%f") DO (
ECHO.%%m%%r%%w,%%n%%s%%x,%%o%%t%%y,%%p%%u%%z
)
)
)
)
)
)
)
)>new.csv
应该有用。
它的作用是什么,
/r "."
)开头的字符(/n
)的行。这个“输出”由FOR /f
读取并解析为2个标记,由冒号分隔(tokens=1*
表示'第一个标记;所有其余部分'),效果是放置%%a
中的行号以及该行的其余部分,即原始.csv
到%%b
csv1
的{{1}}重复的每一行,这次将行号放在csv2
中,行%%c
%%d
中的号码和csv3
%%e
%%f
,%%b
和%%d
中的每一行中的行文本 - 这次选择以逗号分隔的四列。此数据显示在%%f
.. %%m
,%%p
.. %%r
,%%u
.. %%w
我们所要做的就是对接找到适当的部分并插入逗号。DONE!
<小时/> 源和测试结果,包括运行时间(5行)
%%z
答案 1 :(得分:1)
在VBScript中:
Const delim = ","
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.OpenTextFile("File1.csv")
Set f2 = fso.OpenTextFile("File2.csv")
Set f3 = fso.OpenTextFile("File3.csv")
Do Until f1.AtEndOfStream Or f2.AtEndOfStream Or f3.AtEndOfStream
a1 = Split(f1.ReadLine, delim)
a2 = Split(f2.ReadLine, delim)
a3 = Split(f3.ReadLine, delim)
n = Min(UBound(a1), UBound(a2), UBound(a3))
Dim aout(n)
For i = 0 To n
aout(i) = a1(i) & a2(i) & a3(i)
Next
WScript.StdOut.WriteLine Join(aout, delim)
Loop
f1.Close
f2.Close
f3.Close
Function Min(a, b, c)
If a<=b Then
If c<a Then
Min = c
Else
Min = a
End If
Else
If c<b Then
Min = c
Else
Min = b
End If
End If
End Function
答案 2 :(得分:0)
虽然不是真正的编程,但是快速而又脏的方法是在Excel中打开所有文件,创建新的XLS
或XLSX
文件,然后在新创建的文件的第一个单元格中使用此公式:
=[File1.csv]File1!A1&[File2.csv]File2!A1&[File3.csv]File3!A1
其中File1.csv
,File2.csv
和File3.csv
是您的CSV文件。
然后拖动列/行以应用公式。