BATCH将多个文件合并为一个

时间:2016-11-25 23:15:24

标签: file csv batch-file merge

我有一点问题,我有3个txt文件,我想将数据合并到一个带有批处理脚本的csv

例如:

的1.txt

苹果

香蕉

草莓

2.txt

红色

3.txt

两个

我想要的是具有以下序列的final.csv文件:

苹果;红;一个

香蕉;蓝色;二

StrawberryYellow;三

有人能帮助我吗?

感谢大家回答我,我找到了另一种方式,如果有人需要,我会与你分享:

我使用PowerShell合并.csv文件

这是代码: merge.ps1

#Import the CSVs
## GC = Get-Content
$csv1 = @(gc ".\1.csv")
$csv2 = @(gc ".\2.csv")
$csv3 = @(gc ".\3.csv")
# Create an Empty Array
$csv4 = @()
for ($i=0; $i -lt $csv1.Count; $i++) {
    $csv4 += $csv1[$i] + ';' + $csv2[$i] + ';' + $csv3[$i]
    }
# Output to file
$csv4 | Out-File ".\output.csv" -encoding default

# Delete the originals if you want
Remove-Item .\temp\1.csv
Remove-Item .\temp\2.csv
Remove-Item .\temp\3.csv

在我的批处理脚本中,我用这一行来执行它: script.bat

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\merge.ps1'"

1 个答案:

答案 0 :(得分:0)

这个批次将并行读取2个文件,一个带有输入重定向,另一个带有for循环。因此,要合并3个文件,需要采用两步法。首先将1.txt + 2.txt合并到文件1 + 2.txt中,最后将此中间文件与3.txt合并为1 + 2 + 3.txt。文件名通过命令行传递给批处理

:: Merge2Files.cmd File1 File2
@echo off&setlocal EnableDelayedExpansion
Set "Delim=;"
< "%~2" (
   for /F "usebackq delims=" %%a in ("%~1%") do (
      set File2Line=
      set /P File2Line=
      Echo:%%a%Delim%!File2Line!
   )
)

输出(剥离)

C:\> Merge2Files.cmd 1.txt     2.txt >"1+2.csv"
C:\> Merge2Files.cmd "1+2.csv" 3.txt >"1+2+3.csv"
C:\> type 1+*.csv
1+2.csv
Apple;Red
Banana;Blue
Strawberry;Yellow

1+2+3.csv
Apple;Red;One
Banana;Blue;Two
Strawberry;Yellow;Three