在 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 上测试