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=”&嗯,我很确定输入文本文件不会因为最后一行中断而终止,这就是问题所在;用+
复制
,在这种情况下没有帮助,键入
;看看如何解决这个问题……我想可能是最后一行,或者你经常看到的单行文件,我用其他一些场景,包括我已经提到的测试版本。