如何使用添加到现有行和列的批处理文件合并 CSV 文件



我需要并排合并文件,而不是一个在另一个下面 我看过其他例子,我已经尝试过了,但它似乎不起作用。

该文件有两行和 100 列,两个文件都是这样的:

copy "File1.csv" "File2.csv"

如果我在 excel 中打开合并文件,我会在合并文件的第三行上看到第二个文件的第一行。 我需要的是将两个文件的第一行按顺序组合,而不是一个在另一个下面。

您可能需要:

@echo off
setlocal EnableDelayedExpansion
rem Define variables for count of lines:
set /a F1=0
set /a F2=0
for /F "delims=" %%A IN (file1.csv) do (
    set /a F1+=1
    set F1[!F1!]=%%A
)
for /F "delims=" %%B IN (file2.csv) do (
    set /a F2+=1
    set F2[!F2!]=%%B
)
rem If the don't have, which is quite common, you can try:
if %F1% NEQ %F2% (
    if %F1% GTR %F2% (
        for /L %%C IN (1 1 %F1%) do (
            if %%C LSS %F2% (
                (echo/!F1[%%C]!,!F2[%%C]!)>>new.csv
            ) else (
                (echo/!F1[%%C]!)>>new.csv
            )
        )
    ) else (
        for /L %%C IN (1 1 %F2%) do (
            if %%C LSS %F1% (
                (echo/!F1[%%C]!,!F2[%%C]!)>>new.csv
            ) else (
                (echo/!F2[%%C]!)>>new.csv
            )
        )
    )
) else (
    for /L %%C IN (1 1 %F1%) do (
        (echo/!F1[%%C]!,!F2[%%C]!)>>new.csv
    )
)
@echo off
setlocal
rem Help message.
if "%~1" == "/?" goto :help
rem Set delimiter for joining lines.
if "%~3" == "" (set "delim=,") else set "delim=%~3"
rem Count the lines of the 1st file.
set "count=-1"
for /f "usebackq" %%A in ("%~1") do set /a "count+=1"
rem Merge the files.
for /l %%A in (0 1 %count%) do call :merge %%A %*
exit /b
:merge
if %~1 equ 0 (set "skip=") else set "skip=skip=%~1"
(
    for /f "usebackq %skip% delims=" %%A in ("%~2") do (
        set /p "=%%A" < nul
    ) & (
        for /f "usebackq %skip% delims=" %%B in ("%~3") do (
            set /p "=%delim%%%B" < nul
        ) & echo(& exit /b
    )
)
exit /b
:help
echo Merge lines of 2 text files.
echo(
echo Syntax: %~n0 file1 file2 [delimiter]
echo(
echo Examples:
echo   %~n0 a1.csv a2.csv
echo     Delimiter is comma (default).
echo   %~n0 a1.csv a2.csv ";"
echo     Delimiter is semi-colon.
echo   %~n0 a1.csv a2.csv ^> a3.csv
echo     Delimiter is comma (default).
echo     Redirect stdout to file a3.csv.
exit /b

这可能适用于 2 行 csv 文件,尽管对于打开文件时为 100 或 1000 行,读取一行,然后关闭文件。skip选项意味着当文件打开时,它可能需要计数到skip数字,这将减慢每个读取行的读取速度数量增加。

由于CMD的限制,一个变量最多可以存储4096个字符因此,每个单元格最多允许 40 个字符分隔符,基于每行100个单元格。如果你离4096太近.则行可能会截断为壁球在评论中提到。

它不支持 csv 多行单元格或CSV 规范中的任何其他奇特内容。这是一个使用分隔符连接的哑线合并。

它有一个帮助消息,即

scriptname /?

或者使用它来合并 2 个 csv 文件:

scriptname file1.csv file2.csv

要保存到输出文件,请使用:

scriptname file1.csv file2.csv > file3.csv

要设置 , 以外的分隔符,请使用第三个参数。 scriptname /?显示了一个示例。

最新更新