如何在 Windows 命令行中逐行合并文件?

如何在 Windows 命令行中逐行合并文件?

在 DOS 中,有没有办法合并一组文件,例如

1.txt

ABCD
ABCD

2.txt

1
2
3

变成

合并.txt

a1b2c3

就像 *nix 系统上的粘贴命令一样

答案1

不,您需要使用程序或脚本语言(例如 Python)合并这些行。

更新:看着这些 GNU 实用程序的 Win 端口,其中包括粘贴(.exe)

答案2

如果数据比较简单,您可以使用 Excel 进行操作。或者您可以下载 OpenOffice 并在 Calc 中进行操作,但 Calc 中的方法很麻烦。(您需要将数据粘贴到两列中,然后使用“Concatenate”函数以公式形式合并它们(例如 concatenate(Row1; row2;))

答案3

完全同意移植 Unix 工具或脚本语言是可行的方法(尽管对于 Windows 用户来说,VBScript 或 Powershell 可能比 Python 更方便),但合并两个文件在 DOS 中可能:-

@ECHO OFF

REM .bat to merge 1.txt and 2.txt

GOTO :Main

:StartMerge
    SET /P _a=<%1
    SET /P _b=<%2

    ECHO %_a% %_b%

    DEL %1 %2

    GOTO :EndMerge

:CleanUp
    SET _LinesIn1=
    SET _LinesIn2=

    SET _a=
    SET _b=

    GOTO :EOF

:Main
    SET _LinesIn1=0
    SET _LinesIn2=0

    FOR /F "delims=: tokens=1,*" %%i IN ('findstr /n "^" 1.txt') DO (
        ECHO.%%j>_c1n%%i
        SET /A _LinesIn1+=1
    )

    FOR /F "delims=: tokens=1,*" %%i IN ('findstr /n "^" 2.txt') DO (
        ECHO.%%j>_c2n%%i
        SET /A _LinesIn2+=1
    )

    IF %_LinesIn1% NEQ %_LinesIn2% (
        ECHO Cannot merge files; mismatched line count:-
        ECHO   1.txt - %_LinesIn1% lines
        ECHO   2.txt - %_LinesIn2% lines

        DEL _c*

        GOTO :CleanUp
    )

    FOR /L %%n IN (1, 1, %_LinesIn1%) DO (
        CALL :StartMerge _c1n%%n _c2n%%n

        :EndMerge
        REM No-op to avoid ") was unexpected at this time." error
    )

    GOTO :CleanUp

归类为“你能做,并不代表你应该做。”:-)

答案4

合并两个文本文件:

for /f "tokens=*" %i in ('find /c /v "" ^< test2.txt') do set /a n=%i<nul
for /l %a in (1,1,%n%) do (
for /f "tokens=*" %i in ('find /v /n "" ^< test1.txt ^| find "[%a]"') do (
for /f "tokens=*" %j in ('find /v /n "" ^< test2.txt ^| find "[%a]"') do (
set a=%i
set b=%j
set a=!a:*]=!
set b=!b:*]=!
echo:!a! !b!>>merged.txt
)))

测试1.txt:

a
b
c

测试2.txt:

1
2
3

合并.txt:

a 1
b 2
c 3

在 Win 10 CMD 上测试

相关内容