Batch file 如何修复文本文件批量输出中的换行?

Batch file 如何修复文本文件批量输出中的换行?,batch-file,cmd,Batch File,Cmd,我正在尝试使用批处理合并两个文本文件数据 这是将两个文本文件转换为单个文本文件 我有两个文本文件 file1.txt包含 apple ball file2.txt包含 apple ball 我正在使用批处理脚本 type file1.txt file2.txt > output.txt 我希望output.txt中的输出是 apple ball 但是,output.txtam获取的实际输出是 appleball 输出中似乎缺少换行符 (type file1.txt&e

我正在尝试使用批处理合并两个文本文件数据

这是将两个文本文件转换为单个文本文件

我有两个文本文件

file1.txt
包含

apple
ball
file2.txt
包含

apple
ball
我正在使用批处理脚本

type file1.txt file2.txt > output.txt
我希望
output.txt
中的输出是

apple
ball
但是,
output.txt
am获取的实际输出是

appleball
输出中似乎缺少换行符

(type file1.txt&echo.&type file2.txt) > output.txt

可能会解决您的问题。

在windows中合并文件实际上是使用
copy
命令完成的

 Copy file1.txt+file2.txt output.txt
如果您想要的源文本文件是源目录中唯一的文件,或者如果您可以使用标准cmd通配符
*
使用文件glob轻松识别您想要的文件,则您可以一次性将无限数量的文件合并在一起:

 Copy File?.txt output.txt

(Lol,grr我丢失了原始编辑,但是,让我们再试一次)

也可能源文件中只有换行符(LF)。我认为副本应该合并这些内容

Windows仍然倾向于在LFs(CRLF)之前使用回车符(CR),但记事本和其他一些程序将显示LF文件,就好像它们有CRLF一样

但是,命令行中的许多命令不能正确显示此信息,特别是在输出的最后一行,在类似这样的场景中,它们通常会将以下文本连接到该行

为了避免这种情况,您可以使用
More
Type
强制CRLFs

( TYPE File1.txt | MORE & TYPE File2.txt | MORE /P) > Output.txt
我有时间进行测试,我最初的假设是,您不能将
&
类型一起使用,或者将类型与通配符
类型
一起使用到
更多
,这是正确的,因此我在确认后删除了该位

因此,为了简化,可以使用一个简单的循环,但正如asch所指出的,这将行限制为8个字符

 for %A IN ( "Y:\t\A\file*.txt" ) DO @( type "%A" | more /P )
使用通配符的
more
将在文件之间进行分页,即使是在cmd脚本中,也会显示更多的“file*.txt”,尽管您可以执行与上述相同的场景:

 for %A IN ( "Y:\t\A\file*.txt" ) DO @( More /P "%A" )
然而,这也有其局限性

所以,想要在行长或总行数上没有这些字符限制的东西吗?

好吧,如果我们可以编辑源文件,那么简单地回显一个新的行附加到将做必要的

 for %A IN ( "Y:\t\A\file*.txt" ) DO @( ECHO(>"%A" )
完成后,我们可以使用复制合并方法,该方法将没有行或长度限制:

 Copy "Y:\t\A\file*.txt" output.txt
无法编辑原始文件?将其复制到临时文件以执行所需操作,然后在完成后删除该临时目录

 MD "%Temp%\filedir"
 Copy  "Y:\t\A\file*.txt" "%Temp%\filedir\*"
 FOR %A IN ( "%Temp%\filedir\*" ) DO @( ECHO(>"%~A" )
 Copy "%Temp%\filedir\*" output.txt
 RD /S /Q "%Temp%\filedir"
您的输入文本文件似乎不会以最终换行符终止

以下方法仅在需要时插入换行符,即文件的最后几行未以换行符终止时:

  • find
    (将行限制为4095个字符):

    >“output.txt”(
    <“file1.txt”查找/V
    <“file2.txt”查找/V
    )
    
  • type
    findstr
    (将行限制为8190个字符):

    >“output.txt”(
    键入“file1.txt”| findstr“^”
    键入“file2.txt”| findstr“^”
    )
    
  • 更多
    (将行限制为65535个字符,将文件限制为65534行,并将制表符扩展为空格):

    >“output.txt”(
    更多“file1.txt”
    更多“file2.txt”
    )
    
  • 用于/F
    (将行限制为8191个字符并跳过空行):

    >“output.txt”(
    对于/F usebackq^delims^=^eol^=%%L in(“file1.txt”“file2.txt”)do@echo(%%L
    )
    
  • 用于/F
    findstr
    (将行限制为大约8190个字符):

    >“output.txt”(
    对于/F“delims=”%%L in('
    findstr/N“^”file1.txt“^&echo/^&findstr/N“^”file2.txt”
    ""做"@(
    设置“行=%%L”
    setlocal EnableDelayedExpansion
    回音(!行::=!
    端部
    )
    )
    
  • set/p
    (将行限制为1021个字符,并且要求每行执行一次,因为它只读取一个字符):

    setlocal EnableDelayedExpansion
    对于(“^<”file1.txt“find/C/V”“”)中的/F%%C,请设置“LCNT1=%%C”
    对于(“^<”file2.txt“find/C/V”“”)中的/F%%C,请设置“LCNT2=%%C”
    >“output.txt”9<“file1.txt”8<“file2.txt”(
    对于(1,1,%LCNT1%)中的/L%%N,请执行以下操作@(
    
    设置“LINE1=”&嗯,我很确定输入文本文件不会因为最后一行中断而终止,这就是问题所在;
    +
    复制
    ,在这种情况下没有帮助,
    键入
    ;看看如何解决这个问题……我想可能是最后一行,或者你经常看到的单行文件,我用其他一些场景,包括我已经提到的测试版本。